C程序的问题永远不会从strtok()函数返回

时间:2011-05-03 03:04:05

标签: c string strtok

我正在完成大学任务,我一直在解决一个奇怪的问题,我的程序调用{​​{1}}并且永远不会返回。

我的代码如下:

strtok

我在网上查了很多网站,但是我看不出我使用int loadMenuDataIn(GJCType* menu, char *data) { char *lineTokenPtr; int i; lineTokenPtr = strtok(data, "\n"); while (lineTokenPtr != NULL) { /* ... */ } } 的方式有什么问题,我无法确定为什么我的代码会被卡在线上{ {1}}

任何人都可以帮我解释一下吗?

(使用OSX和Xcode,如果它有任何区别)

2 个答案:

答案 0 :(得分:2)

你检查了参数的内容吗?它终止了吗?

你传递的论点是可写内存吗?当strtok对字符串进行标记时,它会将其作为第一个参数写入缓冲区。

如果你写,

char* mystring = "hello\n";

strtok(mystring,"\n"); // you get problems

答案 1 :(得分:0)

函数strtok()用空(即\0)字符替换字符串中的实际标记分隔符号,并返回指向字符串中标记开头的指针。因此,在使用换行符分隔符号重复调用strtok()后,字符串缓冲区看起来像

"The fox\nran over\nthe hill\n"
内存中的

将按字面修改并转换为

"The fox\0ran over\0the hill\0"

char返回的strtok()指针指向字符串the fox\0ran over\0the hill\0。没有分配新内存...原始字符串内存被就地修改,这意味着不要传递类型为const char*的字符串文字。