私はプログラミングに慣れていないし、いくつかの関数を使って遊んでいただけで、memcpy()
関数をテストしたかったのですが、コードが実際にエラーを発生させることなくブレークしています。Cコードのこのスニペットで何が問題になっていますか?
int main()
{
char *psz = "Hello world!";
char dst[1024];
memcpy(psz, dst, sizeof(psz));
return 0;
}
私はプログラミングに慣れていないし、いくつかの関数を使って遊んでいただけで、memcpy()
関数をテストしたかったのですが、コードが実際にエラーを発生させることなくブレークしています。Cコードのこのスニペットで何が問題になっていますか?
int main()
{
char *psz = "Hello world!";
char dst[1024];
memcpy(psz, dst, sizeof(psz));
return 0;
}
あなたの最初の2つのパラメータ値が後方にある
memcpy (destination, source, num);
です。 memcpy()
の最初のパラメータはの宛先であり、2番目のパラメータはのソースです。ローカル(初期化されていない)バッファを文字列リテラルのメモリにコピーしようとしています。文字列リテラルは読み取り専用メモリに格納されているため、実行時エラーが発生します。
また、sizeof()
の使用も間違っています。 psz
がポインタとして宣言されています。ポインタのサイズは、32ビットシステムでは4バイト、64ビットシステムでは8バイトです。バッファー・パラメーターを取り消す場合は、32ビット・システムではHell
をコピーし、64ビット・システムではHello wo
をコピーします。
私はあなたの代わりに、次の操作を行うことを目的疑う:
memcpy(dst, psz, strlen(psz)+1);
または多分を:
char psz[] = "Hello world!";
char dst[1024];
memcpy(dst, psz, sizeof(psz));
strlen(psz)+1は '\ 0'文字を取得するのに適しています –
宛先pszは定数文字列を指しています。 エラーが報告されています。 これはおそらくこれを行うには memcpy(dst、psz、sizeof(psz));
あなたは静的に割り当てられたメモリにコピーすることはできません –
actually'どのようなエラー。 –
これはエラーを投げず、 '0x0F980E9A(msvcr110d.dll)で未処理の例外 'と書いてあるだけです。 –