大家好,我正在尝试将 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);
最佳答案
如果你只是想改变protoName
指向的字符串文字,你只需要改变
*protoName = "HOPOPT";
到
protoName = "HOPOPT";
*protoName =
尝试写入 protoName
指向的第一个字符。这在您的情况下不起作用,因为 protoName
指向无法修改的字符串文字。
您还需要将 sprintf
调用更改为
sprintf(all,"IPv4','%s'", protoName);
%s
格式说明符表示您将传递一个指向以 nul 结尾的 char
数组的指针。 *protoName
为您提供 protoName
指向的第一个字符的字符代码; sprintf
不知道这一点,所以会将该字符代码视为要读取的数组地址。您不拥有此内存,因此从中读取的效果是不确定的;可能会发生崩溃。
顺便说一句,如果你有一个可写的 char
数组并想改变它的内容,你需要使用 strcpy
将一个新的 char 数组复制到
关于C 将字符串插入字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18492545/