C程序从未从strtok()函数返回时出现问题
我正在做一项大学作业,我一直在为一个奇怪的问题绞尽脑汁,我的程序调用了strtokC程序从未从strtok()函数返回时出现问题,c,string,strtok,C,String,Strtok,我正在做一项大学作业,我一直在为一个奇怪的问题绞尽脑汁,我的程序调用了strtok 我的代码如下所示: int loadMenuDataIn(GJCType* menu, char *data) { char *lineTokenPtr; int i; lineTokenPtr = strtok(data, "\n"); while (lineTokenPtr != NULL) { /* ... */ } } 我在网上查了很多网站,但是我看不出我
我的代码如下所示:
int loadMenuDataIn(GJCType* menu, char *data)
{
char *lineTokenPtr;
int i;
lineTokenPtr = strtok(data, "\n");
while (lineTokenPtr != NULL) {
/* ... */
}
}
我在网上查了很多网站,但是我看不出我使用strtok的方式有什么问题,我也无法确定为什么我的代码会被卡在这行lineTokenPtr=strtok(数据“\n”)代码>
有人能帮我解释一下吗
(使用OSX和Xcode,如果有区别的话)您检查过参数的内容了吗?是否终止\0
你传递的参数是可写内存吗?strtok将其标记字符串时作为第一个参数写入缓冲区
如果你写信的话
char* mystring = "hello\n";
strtok(mystring,"\n"); // you get problems
函数strtok()
用null(即\0
)字符替换字符串中的实际标记分隔符号,并返回指向字符串中标记开头的指针。因此,在使用换行符反复调用strtok()
之后,字符串缓冲区
"The fox\nran over\nthe hill\n"
内存中的内容将被逐字地修改到位并转化为
"The fox\0ran over\0the hill\0"
使用从strtok()
返回的char
指针,这些指针指向字符串fox\0
,跑过\0
,和山丘\0
。没有分配新内存。。。原始字符串内存被修改到位,这意味着不要传递类型为const char*
的字符串文本非常重要。您是否已使用调试器,并验证这是未返回的行?如果是,什么是数据
?它是否正确终止,而不是Unicode等?如果您想继续使用传递给strtok
的字符串,必须创建它的副本,因为strtok
和strep
都会修改它。等等,您的意思是它试图更改我原来的输入字符串!?是的。您可以得到一个提示,因为strtok的第一个参数声明为char*not const char*,strtok的签名是char*strtok(char*str,const char*分隔符)代码>。输入字符串缺少const应该告诉您它可能会被修改。