const char *中的不可见char作为strtok()分隔符

时间:2012-01-16 02:38:10

标签: string split newline strtok

我必须通过“新行”或“换行”字符(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()函数的最简单和最优雅的方法是什么? 对我来说,这感觉就像这只是克隆的代码。

2 个答案:

答案 0 :(得分:1)

你需要:

const char *delim = "\n";

第二个参数必须是包含分隔符的C字符串。你在各种形式中拥有的很多东西 C字符串被错误地转换为C字符串。

答案 1 :(得分:0)

它不是很蹩脚或不优雅,它只是有很多错误。

 const char delim[] = 10;

为什么要在这里声明数组?这应该是:

 const char delim = 10;

然后:

 char delim[] = "#";

为什么要声明一个数组并将其设置为等于字符串?该shuld是:

 char delim = '#';