0

何らかの理由で、C 文字列の値を文字列リテラルに設定しようとすると、コンパイラ エラーが発生します。

#include <stdio.h>

int main(void) {
    char hi[] = "Now I'm initializing a string.";
    hi = "This line doesn't work!"; //this is the line that produced the compiler error
    return 0;
}

また、これらはコンパイラ エラーです。

prog.c: In function ‘main’:
prog.c:5:8: error: incompatible types when assigning to type ‘char[31]’ from type ‘char *’
prog.c:4:10: warning: variable ‘hi’ set but not used [-Wunused-but-set-variable]

この問題を解決するにはどうすればよいですか?

4

3 に答える 3

3

文字列をコピーする方法は次のstrcpy()関数です。

strcpy(hi, "This line should work");

注意: これは、文字列を保持するのに十分なスペースがターゲットにあることを確認しません。(そして、いいえ、strncpy()おそらく解決策ではありません

C では、配列の代入は許可されていません。

推奨される読み物: comp.lang.c FAQのセクション 6 。

于 2013-04-09T19:57:35.937 に答える
0

わかりました、ここで起こっていることはこれです。

あなたが書くとき

hi = "something here";

何が起こるかというと、文字列「something here」がメモリに格納され、文字列が格納されているメモリの最初の要素へのポインタを返します。

そのため、左辺値が char へのポインターであり、 char 自体の配列ではないことが期待されます。

したがって、hi は次のように宣言する必要があります。char* hi

于 2013-04-09T19:53:58.697 に答える
0

これを試して:

char hi[100];
strlcpy(hi, "something here", sizeof(hi));

strlcpy()と は安全ではないためstrcpy()、使用する必要strncpy()があります。

参照:私の場合は strncpy または strlcpy

于 2013-04-09T19:58:01.353 に答える