【问题标题】:compiler warning on SDCC: pointer target lost const qualifierSDCC 上的编译器警告:指针目标丢失 const 限定符
【发布时间】:2013-01-25 05:16:18
【问题描述】:

我收到编译器警告,代码如下:

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 限定符

谢谢

【问题讨论】:

  • 请在您的问题中添加确切的错误消息。
  • 完成请检查更新

标签: 8051 sdcc


【解决方案1】:

strtok 函数修改了它的第一个参数。从手册页:

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

   * These functions modify their first argument.

   * These functions cannot be used on constant strings.

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

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

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

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多