gpt4 book ai didi

c - fscanf() 函数在读取的第一个字符处放置\000

转载 作者:行者123 更新时间:2023-11-30 16:17:08 24 4
gpt4 key购买 nike

我正在尝试读取以下格式的文件:

05874121 A 7
07894544 C 3
05655454 B 5
05879544 B 6
05763465 C 2

并将每个“单词”分配给不同的变量(dni、模型、垃圾)

这段代码在Linux上运行,我使用CLion进行调试。

char *path = "file.txt";
FILE *f;
int result;
char dni[9], model[1], trash[100];

f = fopen(path, "r");
do {
result = fscanf(f, "%s %s %s", dni, model, trash);
printf("DNI: %s\n", dni);
}
while( result > 0);

fclose(f);

这应该打印第一列的值,但是当我执行程序时,输出只是:“国家情报总监:”“国家情报总监:”“国家情报总监:”...等等。

在调试时,我意识到“dni”正确存储了所有数字(作为字符),但第一个元素 dni[0] 始终是:0 '/000'就像它是字符串的结尾一样。

我不知道为什么会发生这种情况。

最佳答案

我对您的代码进行了 2 处更正:

#include <stdio.h>
int main (int argc, char ** argv) {
char *path = "file.txt";
FILE *f;
int result;
char dni[9], model[2], trash[100];

f = fopen(path, "r");
while(1) {
result = fscanf(f, "%s %s %s", dni, model, trash);
if (result < 1) break;
printf("DNI: %s model %s trash %s\n", dni, model, trash);
}

fclose(f);
return 0;
}

首先,变量 model[2] 必须有一个额外的字符作为字符串的结尾。

然后,“if (result <1) break;”行。

错误可能是模型[1]只有一个字符。 dni中的\000可以是模型字符串的结尾。

关于c - fscanf() 函数在读取的第一个字符处放置\000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56333257/

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