getline() 在从文本文件读取时读取垃圾值
getline() reading garbage value while reading from a text file
在下面的代码中,我想读取第一行为 <p> -> <many_declaration> <many_expression>
的文本文件。代码片段如下:
ssize_t read;
size_t len = 200;
FILE *fptr;
fptr = fopen(fn ,"r");
if(fptr==NULL){
printf("Error\n");
fclose(fptr);
}
else{
int line_number=1;
char * line = (char *)malloc(sizeof(char)*200);
while((read = getline(&line, &len, fptr)) != -1)
{
char * tokens = strtok(line, " \t\n");
while( tokens != NULL )
{
printf("%s \n",tokens);
printf("%zu \n",strlen(tokens));
tokens = strtok(NULL, " \t\n");
}
}
}
但是,在使用 getline()
读取它然后使用 strtok()
拆分字符串时,第一个标记应该是大小为 3 的 <p>
,但正在读取的字符串有些不可见字符后跟<p>
,长度为6。请问是什么问题?谢谢!
该文件可能以 UTF8 BOM 开头。如果是这样,您应该将文件读取为 UTF-8。
在下面的代码中,我想读取第一行为 <p> -> <many_declaration> <many_expression>
的文本文件。代码片段如下:
ssize_t read;
size_t len = 200;
FILE *fptr;
fptr = fopen(fn ,"r");
if(fptr==NULL){
printf("Error\n");
fclose(fptr);
}
else{
int line_number=1;
char * line = (char *)malloc(sizeof(char)*200);
while((read = getline(&line, &len, fptr)) != -1)
{
char * tokens = strtok(line, " \t\n");
while( tokens != NULL )
{
printf("%s \n",tokens);
printf("%zu \n",strlen(tokens));
tokens = strtok(NULL, " \t\n");
}
}
}
但是,在使用 getline()
读取它然后使用 strtok()
拆分字符串时,第一个标记应该是大小为 3 的 <p>
,但正在读取的字符串有些不可见字符后跟<p>
,长度为6。请问是什么问题?谢谢!
该文件可能以 UTF8 BOM 开头。如果是这样,您应该将文件读取为 UTF-8。