strtok行为不一致

jri*_*bor 4 c valgrind strtok

我正在尝试从文件中读取数据,对其进行标记并对其进行排序,但是当我运行它时,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 ... /

我不知道是什么导致了这一点,我给予的所有价值观都是我所期待的.另外我偶尔会得到一个堆栈粉碎错误,我不知道为什么.

Fre*_*son 7

strtok为两个参数采用以null结尾的字符串.你没有为你的分隔符传递一个.试试这个:

char * getNextToken (char * line){
    const char *delim = ",";
    return strtok(line, delim);
}
Run Code Online (Sandbox Code Playgroud)