ansi-c:赋值在没有强制转换的情况下从指针生成整数

时间:2013-01-21 21:35:36

标签: c pointers casting

我正在尝试更多地了解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";

谢谢,谢谢你的帮助!

3 个答案:

答案 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 */