【问题标题】:Non-visible char in const char * as strtok() delimiterconst char * 中的不可见字符作为 strtok() 分隔符
【发布时间】:2012-01-16 02:38:09
【问题描述】:

我必须通过“换行”或“换行”字符(dec 10,十六进制 0x0A)来拆分网络数据的负载。 所以我尝试使用我遇到了几个问题的 strtok() 函数 当我想用“换行”字符制作一个 const char 字符串时。

原型:

`strtok(char * StringToSplit, const char * Delimiters)`

这造成了一个无效的初始化程序:

`const char delim[] = 10;`

这给出了关于在不强制转换的情况下从 int 生成指针的警告; 虽然
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() 函数的最简单和最优雅的方法是什么? 对我来说,感觉这只是一堆杂乱无章的代码。

【问题讨论】:

    标签: string split newline strtok


    【解决方案1】:

    你需要:

    const char *delim = "\n";
    

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

    【讨论】:

      【解决方案2】:

      它不是笨拙或不优雅,它只是有很多错误。

       const char delim[] = 10;
      

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

       const char delim = 10;
      

      然后:

       char delim[] = "#";
      

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

       char delim = '#';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-07
        • 1970-01-01
        • 2012-04-23
        • 2016-04-28
        • 1970-01-01
        相关资源
        最近更新 更多