我正在尝试从文件中读取数据,对其进行标记并对其进行排序,但是当我运行它时,strtok表现不正常,有时候它有时它不起作用而且我得到非常短/奇怪的标记.
Valgrind似乎认为这是因为strtok依赖于未初始化的价值(我认为):
== 7069 ==条件跳转或移动取决于未初始化的值
== 7069 ==在0x40B61A3:strtok(strtok.S:160)
== 7069 == by 0x8048842:main(main.c:58)
这是我认为valgrind指责的功能:
char*getNextToken(char*line){
strtokreturn strtok(line,&delim);
}
这可能是因为对于strtok的大多数调用,line是NULL吗?
这是我对函数的调用:
strcpy(performer,getNextToken(inputLine));
strcpy(title,getNextToken(NULL));
strcpy(charMin,getNextToken(NULL));
/etc ... /
我不知道是什么导致了这一点,我给予的所有价值观都是我所期待的.另外我偶尔会得到一个堆栈粉碎错误,我不知道为什么.
strtok为两个参数采用以null结尾的字符串.你没有为你的分隔符传递一个.试试这个:
char * getNextToken (char * line){
const char *delim = ",";
return strtok(line, delim);
}
Run Code Online (Sandbox Code Playgroud)