2

私はCについてもっと学ぼうとしていますが、ここで何が起こっているのかを誰かが明確にできるかどうか疑問に思っていました。コンパイラの警告が表示されます:「警告:代入により、キャストなしでポインタから整数が作成されます@ msg [msglen + 1] = "\ 0""

char *msg = NULL;
int len = 10;
int msglen = 0;

while(<argument>) {

msg = (char *)calloc(len, 1);
strncpy(msg, <some string>, len);
msglen = strlen(msg);
msg[msglen+1] = "\0";

ありがとう、私はあなたが助けてくれてありがとう!

4

3 に答える 3

2

文字列リテラルへのポインタを。に割り当てようとしていますchar。次のよう"に、一重引用符の二重引用符を変更します。'

msg[len - 1] = '\0';

最後に割り当てられた文字msglen+1をどのインデックスに変更したかに注意してください。len - 1

于 2013-01-21T21:36:58.387 に答える
1

「\0」は定数文字列として扱われ、実行しようとするとその文字列へのアドレスが所定の位置にスラップされるmsg[len - 1] = "\0"ため、「converts...」というメッセージが表示されます。

代わりにこれを行うmsg[len - 1] = '\0'

于 2013-01-21T21:45:22.363 に答える
0
msg = malloc(len + 1);
/* check return value here ... */
memcpy(msg, some_string, len);
msg[len] = 0;
msglen = strlen (msg); /* this is to catch premature NULs */
于 2013-01-21T21:41:44.227 に答える