gpt4 book ai didi

C - 第三次 scanf 修改第二次 scanf 中的变量

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

我想我已经尝试过任何方法(刷新 stdin、scanf 以使用换行符等),但没有任何效果如我所希望的那样。由于某种原因,第三个 scanf 在以下代码中修改了第二个 scanf 中的变量:

#include <stdio.h>

int main()
{
char first_name[16], last_name[21];
char filename[11];
FILE *opening;

printf("The program saves your first and last name into a file.\n");

printf("Enter your first name:");
scanf("%s", first_name);
getchar();

printf("Enter your last name:");
scanf(" %s", last_name);
getchar();

printf("File where you want to save your name:");
scanf(" %s", filename);

opening = fopen(filename, "wb");

fprintf(opening, "%s %s", first_name, last_name);
printf("\nSuccessfully saved the data!");

fclose(opening);

return 0;
}

输出:

The program saves your first and last name into a file.
Enter your first name: John
Enter your last name: Doe
File where you want to save your name: filename.txt

Successfully saved the data!

一切都很好,除了 filename.txt 的内容是这样的:

John t

我猜测“t”字符以某种方式来自“txt”,但我刚刚开始学习 C,我不知道如何修复这段代码以使其工作。请问各位高手能帮帮我吗?

最佳答案

您的文件名缓冲区太小。

您编写 filename.txt,它有 12 个字符,加上零来完成它,得到 13。您只分配 11。尝试如下:

char filename[20];

它应该可以工作。

使用 scanf 时要小心,它可能会导致非常严重的问题,就像您现在遇到的那样。它对于实验和学习 C 很有帮助,因为它向您展示了正确的内存处理是多么重要。对于任何实际项目,您应该考虑使用不同的函数或框架。

关于C - 第三次 scanf 修改第二次 scanf 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831702/

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