gpt4 book ai didi

C 通过\n(换行符)分割从文件中读取的字符数组,奇怪的输出

转载 作者:行者123 更新时间:2023-11-30 17:12:36 28 4
gpt4 key购买 nike

我正在将原始文本文件读入字符数组,然后我想根据“\n”逐行分割数据。我的代码已附加,但我得到非常奇怪的输出。

INPUT FILE 是在 Windows 上使用 VIM 创建的 .txt 文件,它看起来像:

london
manchester
britain
...

代码(忽略一些 var 声明):

....
char * buffer = 0;
long length;
fl = fopen ("file.txt", "r");
if (fl){
fseek (fl, 0, SEEK_END);
length = ftell (fl);
fseek (fl, 0, SEEK_SET);
buffer = malloc (length);
if (buffer){
fread (buffer, 1, length, fl);
}
fclose (fl);
printf(buffer)
}else{
printf("data file not found");
return -1;
}

char str[80] = "london\nmanchester\nbritain";
char* entity = strtok(buffer, "\n"); //LINE-A, replacing 'buffer' with 'str' the output is correct.
while (entity != NULL) {
printf("%s\n", entity); //this prints strange output as shown below
entity = strtok(NULL, "\n");
}

...

输出:

ondon
anchester
ritain

第一个字符总是丢失。

但是,如果我将“buffer”替换为“str”,则声明的字符数组的内容与文件相同,一切都会按预期工作。

我不明白为什么会收到此错误。如有任何建议,请。

嗯,谢谢!

最佳答案

这可能与您没有终止字符串缓冲区有关。我无法产生您的确切问题,但我确实在输出中得到了意外的额外字符。按如下方式修改代码的相关行,看看是否有帮助:

buffer = malloc(length + 1);
if (buffer) {
fread(buffer, sizeof(char), length, fl);
buffer[length] = '\0';
}
fclose(fl);
<小时/>

如果这不能解决您的问题,您的文本文件中可能有一些奇怪的(不可见的)控制字符。尝试创建一个全新的,看看问题是否仍然出现。

关于C 通过\n(换行符)分割从文件中读取的字符数组,奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31426884/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com