C将字符串插入char指针

use*_*681 4 c string

大家好我试图分配stringchar *指针.以下是我的工作方式,但我收到此警告: 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)

sim*_*onc 8

如果您只想更改哪个字符串文字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来复制一个新的字符数组.

  • @ user2711681不,`protoName`是一个指向字符串文字的指针(不能被修改,应该被视为空的常量).`*protoName`是一个尝试取消引用指针`protoName`并将给你'protoName`指向的第一个东西.在这种情况下,`char`将是'0`.我不会小心翼翼:如果你打算和C一起工作,你必须**理解数组,指针和字符串之间的区别,'&'和dereference'*'运算符的地址是什么以及内存如何分配工作. (2认同)