我必须通过“新行”或“换行”字符(dec 10,hex 0x0A)拆分网络数据的有效负载。 所以我试图使用strtok()函数,我遇到了几个问题 当我想用“新行”字符创建一个const char字符串时。
Proto:
`strtok(char * StringToSplit, const char * Delimiters)`
这使初始化程序无效:
`const char delim[] = 10;`
这给出了关于在没有强制转换的情况下从int生成指针的警
Allthough
printf("Delim: %x", delim)
显示正确的delim值(0xa) 当在strtok()中使用时,应用程序崩溃。
`const char * delim = 10;`
没有警告或错误,printf(“Delim:%x”,delim)给出了正确的值 但是strtok()不起作用(尽管如我所料)。
`char delim = 10;` `(ofc strtok(..., &delim))`
这似乎完成了这项工作,但我仍然收到一个关于传递非const char ptr的警告,其中const char ptr应该是strtok()函数。
`char delim[] = "#";` `delim[0] = 10;`
最后,这似乎没有任何警告。
`char tmp[] = "#";` `tmp[0] = 10;` `const char *delim = tmp;`
问题是,将这样一个不可见的字符传递给strtok()函数的最简单和最优雅的方法是什么? 对我来说,这感觉就像这只是克隆的代码。
答案 0 :(得分:1)
你需要:
const char *delim = "\n";
第二个参数必须是包含分隔符的C字符串。你在各种形式中拥有的很多东西不 C字符串被错误地转换为C字符串。
答案 1 :(得分:0)
它不是很蹩脚或不优雅,它只是有很多错误。
const char delim[] = 10;
为什么要在这里声明数组?这应该是:
const char delim = 10;
然后:
char delim[] = "#";
为什么要声明一个数组并将其设置为等于字符串?该shuld是:
char delim = '#';