-2

これが私のコードです:

char *str = malloc(100*sizeof(char));
*str ="Hello"; // or pass it any string

str今、私は関数を渡したい:

sys_open(const char * filename, int フラグ, int モード)

char 配列を 2 番目のパラメーターとして使用すると機能しますが、値がコピーされたポインターを使用すると機能しません。

char 配列では目的を達成できますが、ポインタでは同じことができないのはなぜですか?

4

3 に答える 3

4

C では、そのように文字列を割り当てることはできません。strcpy(3)またはその親戚の 1 つを使用する必要があります。

于 2013-02-09T04:10:36.393 に答える
1

いくつか間違っていることがあります:

*str = "Hello"; // or pass it any string
  • strchar**strchar、および"Hello"ですconst char*(まあ、実際にconst char[6]は に崩壊しconst char*ます)。const char*を に代入することは違法charです。

  • あなたが意図したと仮定すると、それは文字列リテラルstr = "Hello";を指すようにポインターを再割り当てしているため、まだ間違っています。以前に割り当てたメモリには何も指していないため、メモリ リークが発生しています。str "Hello"malloc

  • あなたがやっているように 渡すstrことはうまくいきません。割り当てた書き込み可能なメモリではなく、文字列リテラルを指しています。が間違っているだけでなく、まったく書き込めなくなります。(文字列リテラルは不変であり、変更しようとすると未定義の動作が発生します。)sys_readstrcountsys_read

于 2013-02-09T04:20:07.773 に答える
-2

void *プログラムでは、mallocがaを返し、同じものをに割り当てるとエラーが発生するため、型キャストが欠落しているように感じchar *ます。

于 2013-02-09T04:18:20.553 に答える