【发布时间】:2016-02-27 12:22:06
【问题描述】:
这是我的问题:我想映射文件“filename.txt”,它基本上每行包含两对字符串:
"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 是 DESTRUCTIVE - 它在标记字符串时写入字符串。解决方案:1)在尝试“strtok()”之前将每个字符串复制到本地缓冲区,或2)打开映射读/写(而不是只读)。
标签: c string parsing mmap strtok