【发布时间】:2014-08-30 12:24:49
【问题描述】:
这段代码有问题:
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时,人们会使用原始字符数组。 -
在填写完
part、name、ext之后,您永远不会使用它们。如果您修改代码以使用它们,请记住这些不是字符串(您创建的字符缓冲区没有空终止符) -
还有一件事:
\t有一个特殊的含义,如果你想要一个 \ 分隔符然后使用X:\\test.exe