2016-08-06 7 views
1

私はプログラミングに慣れていないし、いくつかの関数を使って遊んでいただけで、memcpy()関数をテストしたかったのですが、コードが実際にエラーを発生させることなくブレークしています。Cコードのこのスニペットで何が問題になっていますか?

int main() 
{ 
    char *psz = "Hello world!"; 
    char dst[1024]; 

    memcpy(psz, dst, sizeof(psz)); 

    return 0; 
} 
+0

あなたは静的に割り当てられたメモリにコピーすることはできません –

+0

actually'どのようなエラー。 –

+0

これはエラーを投げず、 '0x0F980E9A(msvcr110d.dll)で未処理の例外 'と書いてあるだけです。 –

答えて

2

あなたの最初の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)); 
+1

strlen(psz)+1は '\ 0'文字を取得するのに適しています –

1

宛先pszは定数文字列を指しています。 エラーが報告されています。 これはおそらくこれを行うには memcpy(dst、psz、sizeof(psz));

1

memcpy documentationをご覧ください。

正しい使用方法はないmemcpy()

memcpy (source, destination, num); 
関連する問題