gpt4 book ai didi

c - 了解 fgets() 函数

转载 作者:行者123 更新时间:2023-11-30 18:25:37 24 4
gpt4 key购买 nike

我尝试编写一个 C 程序来提示用户使用 fgets() 函数输入字符串。

这是代码:

#include <stdio.h>

#define MAXLEN 10

int main (void){
char buffer[MAXLEN];
puts("Enter text a line at a time;enter a blank to exit.");

while(fgets(buffer,MAXLEN,stdin) != NULL){
printf("%s",buffer);
if(buffer[0]=='\n')
break;
}
return 0;
}

我的问题是为什么程序仍然运行并且不会导致任何未定义的行为?自从MAXLEN=10 并且当我输入长度超过 10 个字符的字符串时,编译器不会告诉任何内容并继续打印所有字符串。

最佳答案

and don't cause any undefined behaviour?

首先,“未定义的行为”并不意味着崩溃。这意味着该标准不能向您保证任何事情。现在,无论这是明显的还是引人注目的(即导致崩溃或其他情况),都只是运气问题。

I entered a string with more than 10 character long the compiler don't tell anything and continues to print all the string.

编译器不会打印该字符串,而是您的程序打印。编译器也不知道用户将输入的字符串的长度。

但是,您可以向 fgets() 传递缓冲区的大小(作为其第二个参数)。 坦率地说,您认为为什么会有该参数?它正是为了这个目的而存在的。 fgets() 不会(一次)读取超出允许数量的字符。如果这就是缓冲区大小(通常应该是),那么您将永远是安全的。

但我确信,如果您努力阅读 fgets() 的文档,您自己就可以推断出这一点。

关于c - 了解 fgets() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447205/

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