我在使用這段代碼的麻煩:調用strtok()時訪問衝突; C++
char KernelFS::doesExist(char* fname){
char part;
char name[8];
char ext[3];
char* token;
token = strtok(fname, "\\");
strncpy(&part, token, 1);
token = strtok(fname, "\\");
strncpy(name, token, 8);
token = strtok(fname, "\\");
strncpy(ext, token, 3);
return 0;
}
它編譯和休息,當我在strtok的第一次調用(...)運行它 - 訪問衝突寫入位置... 無知道爲什麼:(
我稱這個功能:
KernelFS :: doesExist( 「X:\ TEST.EXE」);
點是將FNAME char數組分成3個陣列; 一分區的名稱, 一個用於文件名, 一個用於文件擴展名;
感謝您的幫助! :)
爲什麼當你有'std :: string'時,你使用原始字符數組。 – 101010 2014-08-30 12:26:38
填充後絕不會使用'part','name','ext'。如果修改代碼以使用它們,請記住它們不是字符串(您已經創建了沒有空終止符的char緩衝區) – 2014-08-30 12:35:52
還有一件事:'\ t'具有特殊含義,如果你想要一個單獨的分隔符,那麼就使用'X:\\ test.exe' – 2014-08-30 12:37:40