gpt4 book ai didi

更改顺序修复了我的错误。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:04:40 24 4
gpt4 key购买 nike

我花了一段时间才弄清楚这个错误,并且想知道为什么第二个代码块不起作用。

工作:

FILE *readFile;
FILE *saveFile;

char readFileName;
char saveFileName;

printf("read file name:\n");
scanf("%s", &readFileName);
readFile = fopen(&readFileName, "r");

printf("save file name:\n");
scanf("%s", &saveFileName);
saveFile = fopen(&saveFileName, "w");

没用:

FILE *readFile;
FILE *saveFile;

char readFileName;
char saveFileName;

printf("read file name:\n");
scanf("%s", &readFileName);

printf("save file name:\n");
scanf("%s", &saveFileName);

readFile = fopen(&readFileName, "r");
saveFile = fopen(&saveFileName, "w");

最佳答案

您正在获取对分配在堆栈上的单个 char 的引用。该指针无效,不能用作对字符数组的引用。

尝试用用作缓冲区的真实字符数组替换您的字符串:

char readFileName[128];
scanf("%127s", readFileName);

否则会发生的是 scanf,它不检查任何东西,将用从 stdio 获取的字符覆盖堆栈上的数据,从而导致 stack buffer overflow ,这意味着未定义的行为。

您可以在格式说明符中指定最多获取多少个字符,但请记住减去一个,因为 null terminatorscanf 本身自动附加。

关于更改顺序修复了我的错误。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12719904/

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