大家好我试图分配string到char *指针.以下是我的工作方式,但我收到此警告: assignment makes integer from pointer without a cast.
在C中处理字符串的正确原因是什么?
char* protoName = "";
if(h->extended_hdr.parsed_pkt.l3_proto==0)
*protoName = "HOPOPT";
else if(h->extended_hdr.parsed_pkt.l3_proto==1)
*protoName = "ICMP";
else if(h->extended_hdr.parsed_pkt.l3_proto==2)
*protoName = "IGMP";
else if(h->extended_hdr.parsed_pkt.l3_proto==3)
*protoName = "IGMP";
else if(h->extended_hdr.parsed_pkt.l3_proto==4)
*protoName = "IGMP";
char all[500];
sprintf(all,"IPv4','%s'",* protoName);
Run Code Online (Sandbox Code Playgroud)
如果您只想更改哪个字符串文字protoName指向,则只需更改即可
*protoName = "HOPOPT";
Run Code Online (Sandbox Code Playgroud)
至
protoName = "HOPOPT";
Run Code Online (Sandbox Code Playgroud)
*protoName =尝试写入指向的第一个字符protoName.在您的情况下,这不适用于protoName指向无法修改的字符串文字.
您还需要将sprintf通话更改为
sprintf(all,"IPv4','%s'", protoName);
Run Code Online (Sandbox Code Playgroud)
的%s,你会被指针传递到一个空终止的格式说明信号char阵列. *protoName给你指向的第一个字符的字符代码protoName; sprintf不知道这个,所以将该字符代码视为要读取的数组的地址.你没有这个记忆,所以读取它的效果是不明确的; 可能会崩溃.
顺便说一句,如果你有一个可写char数组并且想要改变它的内容,你需要用它strcpy来复制一个新的字符数组.