gpt4 book ai didi

c - Printf 两次输出相同的数组

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

我的主要问题是,当我从 struct Item 打印时,s.name 被打印两次。

代码:

#include <stdio.h>

struct Item{
char code[5];
char name[40];
};

int main(){
FILE *f;
struct Item s;

//Open file
f = fopen("ex.txt", "r");

//Read from file
fscanf(f, "%5c;%[a-zA-Z ]\n", s.code, s.name);

//Print from file
printf("%s %s", s.code, s.name); //Main problem here
fclose(f);
}

输入(例如.txt):

AB011;Hello World

输出应该是:

AB011 Hello World

但它是:

AB011Hello World Hello World

这是怎么回事?

附加说明:我需要为此使用 fscanf,以便我可以了解它是如何工作的。

最佳答案

在调用您正在使用的 fscanf

"%5c;%[a-zA-Z ]\n"

作为格式说明符。格式说明符的 %5c 部分将 5 个字符读取到 s.code。这不会为终止空字符留下空间。

将其用作带有 %s 说明符的 printf 参数会导致未定义的行为。 %s 需要一个空终止字符串。

您应该将 code 的大小更改为使用 6 个字符,然后在 fscanf 行之后使用空字符终止它。

#include <stdio.h>

struct Item{

/// CHANGED HERE
char code[6];
char name[40];
};

int main(){
FILE *f;
struct Item s;

//Open file
f = fopen("ex.txt", "r");

//Read from file
fscanf(f, "%5c;%[a-zA-Z ]\n", s.code, s.name);

/// CHANGED HERE
s.code[5] = '\0';

//Print from file
printf("%s %s", s.code, s.name);
fclose(f);
}

关于c - Printf 两次输出相同的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37338817/

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