预期‘;const char*uuu restrict_uuu’;但参数的类型为‘;int’;带strtok函数

预期‘;const char*uuu restrict_uuu’;但参数的类型为‘;int’;带strtok函数,c,C,我已经尝试传递字符变量而不是'\t',但仍然显示相同的错误。您传递的是字符常量(相当于整数),而不是字符串作为第二个参数 char *local_buffer, *buff; fgets(buff, 1024, fp); local_buffer=strtok(buff,'\t'); //Error is coming with this line 你想要的是: local_buffer=strtok(buff,'\t'); 尝试: 说明: 字符周围的双引号(“”)表示以null结尾的C样

我已经尝试传递字符变量而不是'\t',但仍然显示相同的错误。

您传递的是字符常量(相当于整数),而不是字符串作为第二个参数

char *local_buffer, *buff;
fgets(buff, 1024, fp);

local_buffer=strtok(buff,'\t'); //Error is coming with this line
你想要的是:

local_buffer=strtok(buff,'\t');
尝试:

说明:

字符周围的双引号(“”)表示以null结尾的C样式字符串(
char*


字符周围的单引号(“”)表示一个字符(显然
int

您是否尝试过
strtok(buff,“\t”)
?请特别注意双引号而不是单引号。是的。如前所述。单引号指定一个字符,该字符被解释为该符号的int.ASCII代码。@Kamiccolo
'\t'
不指定ASCII。将与任何其他符合字符C的编码一起工作。当然ASCII是最常见的。@chux谢谢:)我怀疑C标准中是否有处理字符编码的。我想是的。例如,正如我所记得的,GCC有一些标志。嗯。。。。关于这一点的一些解释:,…一个诡辩:虽然字符串文字是只读的,但它们不是常量。字符串文字的类型为
char[N]
,其中
N
是字符串的长度加上一。在大多数情况下,它被转换为
char*
。建议
charbuff[1024]
而不是
char*buff
@KeithThompson:Hmm。。。我以前从未听说过,所以我只是浏览了C99文档。。。因此,从技术上讲,字符串文字不是一个常量表达式,但它们在翻译时被“计算”,并且编译器不会捕获到对字符串文字指针的修改,而是。。。有趣…@Chux:接得好,我看到了一个错误,然后说:“哦!哦!我找到了!”。。。我把它归咎于缓存和“复制粘贴”的邪恶。谢谢@乔治:对。这是为了向后兼容。ANSIC之前的版本没有const,因此无法编写一个函数,该函数接受一个char*,并承诺不修改其参数所指向的内容。一个可以将字符串文字作为参数的函数:
foo(“hello”)
应该将其参数声明为
const char*
,但是强制它(通过使字符串文字
const
)会破坏ANSI之前的代码,而这些代码没有使用
const
的选项。(在C++中,字符串文字是 CONST ),因为后退兼容性不太受关注。
local_buffer=strtok(buff,"\t");
char *local_buffer, buff[1024];
fgets(buff, 1024, fp);

local_buffer=strtok(buff,"\t"); //Error is coming with this line