gpt4 book ai didi

c - 未使用 sscanf 正确存储来自 fgets 的输入

转载 作者:行者123 更新时间:2023-11-30 15:49:13 25 4
gpt4 key购买 nike

所以我有一小部分代码(基本上是整个程序的输入)。

它必须采用最多 20 个字符的字符串形式,并且两个整数均以空格分隔。

例如大师1 1

int main(void)
{

int i, x, y;
char input[28];
char* name = NULL;
fgets(input, 28, stdin);
sscanf(input, "%s %i %i", name, &x, &y);
printf("%s %i %i\n", name, x, y);
return 0;
}

基本上,我试图将其打印出来,以查看程序是否正确存储输入,因为稍后必须将其存储在链接列表中。

一切正常,但无论我输入什么,它都会打印出 (null) 0 4196064。如果我也在 sscanf() 函数中的名称前面放置“and”,则会出现段错误。

任何有关如何解决此问题的想法将不胜感激!

最佳答案

sscanf 不会为您的字符串分配存储空间。

char name[28];

会起作用的。&name 会导致 seg.fault,因为间接级别不同。然后您传递的是 char * * ,它在 sscanf 中被解释为 char * 。由于您的 name 变量位于堆栈上,因此 &name 指向堆栈,因此 sscanf 将覆盖您的堆栈内容。这很容易导致段错误。

关于c - 未使用 sscanf 正确存储来自 fgets 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16380227/

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