您好我試圖通過使用fread
將整個文件加載到char[]
來標記字符串。 由於一些奇怪的原因,它並不總是有效,而valgrind在這個非常小的示例程序中抱怨。valgrind抱怨做了一個非常簡單的strtok在c
鑑於像test.txt
first
second
的輸入和下面的程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
//returns the filesize in bytes
size_t fsize(const char* fname){
struct stat st ;
stat(fname,&st);
return st.st_size;
}
int main(int argc, char *argv[]){
FILE *fp = NULL;
if(NULL==(fp=fopen(argv[1],"r"))){
fprintf(stderr,"\t-> Error reading file:%s\n",argv[1]);
return 0;
}
char buffer[fsize(argv[1])];
fread(buffer,sizeof(char),fsize(argv[1]),fp);
char *str = strtok(buffer," \t\n");
while(NULL!=str){
fprintf(stderr,"token is:%s with strlen:%lu\n",str,strlen(str));
str = strtok(NULL," \t\n");
}
return 0;
}
編譯像跑步一樣
gcc test.c -std=c99 -ggdb
謝謝
strtok已經過時,有幾個問題。不要使用它。 – 2010-04-02 07:41:47
你會推薦什麼?對於簡單的東西,這不必是線程安全等我仍然覺得它非常有用 – monkeyking 2010-04-02 07:56:58
好吧,顯然它不是那麼簡單,否則'valgrind'不會抱怨。 – 2010-04-02 08:46:27