如何像语言学一样理解C编程——C库
我正在学习C语言,我正在努力理解这个库 例如,在GNU C库中,它提供: -函数:char*fgets(char*s,int 计数,文件*流) fgets函数读取字符 从小溪往上 添加并包含换行符 并将它们存储在字符串s中, 添加空字符以标记 绳子的末端。你必须供应 在s中计算相当于空格的字符数, 但是读取的字符数是有限的 至多− 1.额外字符 空格用于保存空值 字符串末尾的字符 如果系统已经在文件末尾 当您调用FGET时,则 数组的内容保持不变 并返回一个空指针。空的 如果读取失败,指针也会返回 发生错误。否则,返回 值是指针s 警告:如果输入数据具有空值 性格,你说不出来。所以 除非你知道最基本的规则,否则不要使用FGET 数据不能包含空值。不要使用 它可以读取用户编辑的文件 因为,如果用户插入null 角色,你要么处理它 正确地打印或打印一个明确的错误 消息我们建议使用getline 而不是FGET 然而,我仍然看到人们使用fgets从控制台收集输入,而不是文件,例如:如何像语言学一样理解C编程——C库,c,C,我正在学习C语言,我正在努力理解这个库 例如,在GNU C库中,它提供: -函数:char*fgets(char*s,int 计数,文件*流) fgets函数读取字符 从小溪往上 添加并包含换行符 并将它们存储在字符串s中, 添加空字符以标记 绳子的末端。你必须供应 在s中计算相当于空格的字符数, 但是读取的字符数是有限的 至多− 1.额外字符 空格用于保存空值 字符串末尾的字符 如果系统已经在文件末尾 当您调用FGET时,则 数组的内容保持不变 并返回一个空指针。空的 如果读取失败,指针也会返
fgets(line,sizeof(line),stdin);
sscanf(line,"%d",¤t); // 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下)。