我收到编译器警告,这是代码:
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限定符
感谢
答案 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
,但如果它存在则可以使用它。
或者,在解析之前创建自己的传入字符串副本。如果您知道最大传入字符串大小,则可以在解析函数顶部的堆栈上分配字符串副本。