gpt4 book ai didi

c - 使用 %c 和 %s 进行 scanf 会导致错误

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

我正在尝试扫描一个 int、一个 char、一个字符串和另一个 int。我认为我可以使用以下代码扫描所有这些内容:

int int1, int 2;
char char1;
char* string1;
fscanf(stdin, "%d %c %s %d", &int1, &char1, string1, &int2)

但是当我运行代码时,它在我输入所有信息之前突然停止。我计划用换行符分隔变量。我的终端在运行时如下所示:

~$ ./program
100
K
word
~$

在我输入 int2 之前程序就关闭了,这让我相信 string1 可能也没有被考虑在内。有关如何解决此问题的任何建议,或者更有效的替代方法?

最佳答案

如果您正确声明(或分配)变量,则您给出的行将按预期工作。

在此代码中:

    int int1, int2;
char char1;
char *string1;

fscanf(stdin, "%d %c %s %d", &int1, &char1, string1, &int2);

由于 string1 此处未初始化,这是未定义的行为。对于Linux/glibc,如果string1碰巧包含0(NULL),它会导致scanf停止处理格式字符串,这会产生与你给出的结果相同。在其他系统上它可能会工作,也可能会崩溃。

这将按预期工作:

    int int1, int2;
char char1;
char string1[20];

fscanf(stdin, "%d %c %19s %d", &int1, &char1, string1, &int2);

关于c - 使用 %c 和 %s 进行 scanf 会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508479/

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