输入输出
可能需要查看#stdio.h
c不具备i/o语句,不具备异常处理语句,都是通过函数库实现的
输入
基准是stdin
当希望用户输入文件的时候,很自然的会用到gets和scanf方法来读取
scanf
会提示不安全,可以用strtol替换这里的。原来scanf是对stdin进行了字符转换,但是不够优秀
gets
会提示已经废弃,上cppreference查看,发现新标准11有gets_s方法。原来是gets函数在误传数组而不是字符串的时候,容易溢出
但是使用11标准也无法找到gets_s方法,gcc还会提示 undefined reference to `gets_s' 。原来[这个方法是visual studio实现的,并且标准只是在附录中提到](https://stackoverflow.com/questions/25593714/undefined-reference-to-gets-s#answer-25593782)。
结果
建议用fgets()替换gets() : 它会丢弃换行符,并在末尾存储一个NUL字节,只是需要指定输入的行大小。
char input[81]; fgets(input, sizeof(input), stdin);如果输入80个字符,input会只有80个字符,末尾没有换行符。
如果声明input[80],输入80个字符,会有79个字符,末尾没有换行符
如果声明input[82],输入80个字符,会有80个字符,末尾有换行符
从c本身的追求效率而言,我觉得还是不要这么搞吧。。
stdio.h
stdio_limit.h
getchar
Last updated
Was this helpful?