如何解决为什么 fgets 修改一个我没有传给他的全局字符串?
我在 fgets 中遇到了这个“错误”:我需要从用户那里读取他的名字和姓氏,但问题出在姓氏部分,因此,它可以有空格(例如“De Luca”)和出于这个原因,我不得不勉强使用 fgets。
之后我必须计算税码(是意大利的 SSN),但那部分是正确的。 我会更好地解释它:在姓氏的 fgets 之后,字符串 'code' 将其第 16 个元素和以下元素更改为我的 fgets 输入,而没有在 fgets 中传递它,也没有在函数中传递它(我知道它是全局的,但是......)。
我只想知道为什么以及是否可以在不进入第 16 个元素并放置 '\0' 的情况下摆脱这个问题(我希望我的代码尽可能高效,我知道缓冲区fgets 溢出,因此我想尽可能少地占用内存)。 谢谢。
全局变量:
char surname[20],code[16];
出现问题时的功能:
//my function: to prove that is this fgets that modifies all,I put a printf of the last position of code
void inputSurname(){
printf("Last position before fgets: %c",code[16]);
textcolor(4);
printf("Surname: ");
textcolor(7);
fgets(surname,sizeof(surname),stdin);// <-- PROBLEM HERE
printf("Last position after fgets: %c",code[16]);
}
输出:
Last position before fgets:
Surname: name
Last position after fgets: n
...all the rest of the code
Code: (rest of the code for example OXXOXX03L14C933Qo that is right)name //name shouldn't be here thb
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。