SDCC上的编译器警告:指针目标丢失const限定符

时间:2013-01-25 05:16:18

标签: 8051 sdcc

我收到编译器警告,这是代码:

uint8 executeSpecialCommand(const char *string)
{
    char *parameters;           
    parameters = strtok(string, "=");

    if (parameters)
     {
         usbSendf("\nProcessing Parameters...");       
         while(parameters != NULL)
         {
             parameters = strtok(NULL, " ");
             usbSendf("\n%s", parameters);
         }
         return 1;
     }
    else
        return 0;   
}

错误指向第3行,我认为这是因为“=”。 strtok期待一个const char *以某种方式在代码的其他部分我使用相同的,我没有得到任何警告。这里的想法是为了帮助教育我?

更新 我得到的错误是:

  

警告196:指针目标丢失const限定符

感谢

1 个答案:

答案 0 :(得分:1)

strtok函数修改其第一个参数。从手册页:

  

BUGS          使用这些功能时要小心。如果您确实使用它们,请注意:

   * These functions modify their first argument.

   * These functions cannot be used on constant strings.

这意味着您可以将const char*作为第一个参数传递,就像使用名为string的变量一样。

strtok通过在每个分隔符的传递字符串中插入NULL来工作,这允许它返回每个标记而不为返回的字符串分配内存。我怀疑SDCC是否支持可重入版本strtok_r,但如果它存在则可以使用它。

或者,在解析之前创建自己的传入字符串副本。如果您知道最大传入字符串大小,则可以在解析函数顶部的堆栈上分配字符串副本。