我正在尝试更多地了解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";
谢谢,谢谢你的帮助!
答案 0 :(得分:2)
您正在尝试将指向字符串文字的指针指向char
。更改单引号"
的双引号'
,如下所示:
msg[len - 1] = '\0';
请注意,我为msglen+1
更改了len - 1
,它为最后分配的字符编制索引。
答案 1 :(得分:1)
将“\ 0”视为常量字符串,当您尝试执行msg[len - 1] = "\0"
时,该字符串的地址就会被打到位,因此您会收到消息“转换...”
改为msg[len - 1] = '\0'
答案 2 :(得分: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 */