ansi-c:赋值从指针生成整数而不强制转换
我正在努力学习更多关于C的知识,我想知道是否有人能澄清这里发生了什么。我收到一个编译器警告:“警告:赋值从指针生成整数,而不使用强制转换@msg[msglen+1]=”\0”ansi-c:赋值从指针生成整数而不强制转换,c,pointers,casting,C,Pointers,Casting,我正在努力学习更多关于C的知识,我想知道是否有人能澄清这里发生了什么。我收到一个编译器警告:“警告:赋值从指针生成整数,而不使用强制转换@msg[msglen+1]=”\0” char*msg=NULL; int len=10; int msglen=0; while(){ msg=(char*)calloc(len,1); strncpy(msg,len); msglen=strlen(msg); msg[msglen+1]=“0”; 谢谢,非常感谢您的帮助!您正在尝试将指向字符串文字的指针
char*msg=NULL;
int len=10;
int msglen=0;
while(){
msg=(char*)calloc(len,1);
strncpy(msg,len);
msglen=strlen(msg);
msg[msglen+1]=“0”;
谢谢,非常感谢您的帮助!您正在尝试将指向字符串文字的指针指定为
字符。
将双引号“
更改为单引号”
,如下所示:
msg[len - 1] = '\0';
请注意,我将msglen+1
更改为len-1
,它对最后分配的字符进行索引。a“\0”被视为一个常量字符串,当您尝试执行msg[len-1]=“\0”
时,该字符串的地址被替换到位,因此您会收到消息“converts…”
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 */
请改为执行此操作。
msg[len-1]='\0'
您使用的是strncpy()
。这几乎可以肯定。msglen=strlen(msg);
有可能出现未定义的行为,因为strncpy
通常不是0-terminate。它似乎被初始化为10,以后再也不会更改。但在那一行之前会出现问题。+1如果您认为这有帮助,请回答:-)@txcotrader
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 */