这里是我的问题:我要地图文件“FILENAME.TXT”,基本上由两对每行字符串的:用strtok解析mmaped文件?
"string1 string2
string3 string4
string5 string6..."
,然后我想使用的strtok来分隔不同的字符串。
所以我的文件映射是这样的:
// open file
if ((fdsrc = open("filename.txt", O_RDONLY)) < 0) {
fprintf(stderr, "src open error");
exit(1);
}
// get the size of the file
if (fstat(fdsrc, &statbuf) < 0) {
fprintf(stderr, "fstat error");
exit(1);
}
// mmap the file
if ((src = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, fdsrc, 0)) == (caddr_t) -1) {
fprintf(stderr, "mmap src");
exit(1);
}
当我运行线
printf("src: %s \n", src);
它正确打印文件的内容!
但是当我尝试分开的话
char* token;
token = strtok(src, " \n");
while (token != NULL) {
token = strtok(NULL, " \n");
}
输出段错误。 为什么我不能使用StrTok呢?
strtok是*破坏性的 - 它写入字符串,因为它标记它。解决方案:1)在尝试“strtok()”之前将每个字符串复制到本地缓冲区,或者2)打开映射读/写(而不是只读)。 – paulsm4