Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何像语言学一样理解C编程——C库_C - Fatal编程技术网

如何像语言学一样理解C编程——C库

如何像语言学一样理解C编程——C库,c,C,我正在学习C语言,我正在努力理解这个库 例如,在GNU C库中,它提供: -函数:char*fgets(char*s,int 计数,文件*流) fgets函数读取字符 从小溪往上 添加并包含换行符 并将它们存储在字符串s中, 添加空字符以标记 绳子的末端。你必须供应 在s中计算相当于空格的字符数, 但是读取的字符数是有限的 至多− 1.额外字符 空格用于保存空值 字符串末尾的字符 如果系统已经在文件末尾 当您调用FGET时,则 数组的内容保持不变 并返回一个空指针。空的 如果读取失败,指针也会返

我正在学习C语言,我正在努力理解这个库

例如,在GNU C库中,它提供:

-函数:char*fgets(char*s,int 计数,文件*流)

fgets函数读取字符 从小溪往上 添加并包含换行符 并将它们存储在字符串s中, 添加空字符以标记 绳子的末端。你必须供应 在s中计算相当于空格的字符数, 但是读取的字符数是有限的 至多− 1.额外字符 空格用于保存空值 字符串末尾的字符

如果系统已经在文件末尾 当您调用FGET时,则 数组的内容保持不变 并返回一个空指针。空的 如果读取失败,指针也会返回 发生错误。否则,返回 值是指针s

警告:如果输入数据具有空值 性格,你说不出来。所以 除非你知道最基本的规则,否则不要使用FGET 数据不能包含空值。不要使用 它可以读取用户编辑的文件 因为,如果用户插入null 角色,你要么处理它 正确地打印或打印一个明确的错误 消息我们建议使用getline 而不是FGET

然而,我仍然看到人们使用fgets从控制台收集输入,而不是文件,例如:

fgets(line,sizeof(line),stdin);
sscanf(line,"%d",&current); // read the input
有人能给我解释一下我应该如何阅读和遵循C语言的语法吗?你应该通过模仿别人的代码来学习C,还是通过实际引用库然后自己编写代码来学习C

干杯,

stdin
FILE*
类型的变量,在中定义。
它用于从中读取数据。

注意:
fgets
和其他功能与C语法无关,而与标准库有关。他们谈论的getline函数是该特定库中的非标准扩展。对于可移植代码,我认为最好还是坚持使用fgets。@jonsca:posix2008中添加了
getline()
。这使得它对于vanilla c来说仍然是非标准的,但是在类似unix的系统上是标准的,而且
fgets
是可怕的。@dmckee我一直认为可移植性是最重要的,但我理解你的观点。我从未见过getline的代码,所以我不知道是什么将它与实现联系在一起。但是,我认为有必要向不熟悉该语言的人强调,fgets在安全性方面优于get()或scanf(使用%s),而不使用字段宽度说明符。@jonsca:关于fgets的安全性改进,您肯定是对的。
fgets
。我已经使用纯c89库函数实现了
getline
语义,GNU使它们的版本可以单独使用libc(尽管显然是在GPL下)。