Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ansi-c:赋值从指针生成整数而不强制转换_C_Pointers_Casting - Fatal编程技术网

ansi-c:赋值从指针生成整数而不强制转换

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”; 谢谢,非常感谢您的帮助!您正在尝试将指向字符串文字的指针

我正在努力学习更多关于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”;

谢谢,非常感谢您的帮助!

您正在尝试将指向字符串文字的指针指定为
字符。
将双引号
更改为单引号
,如下所示:

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