考虑下面的程序。
null
C
void read() { char str[20]; gets (str); printf ( "%s" , str); return ; } |
代码看起来很简单,它从标准输入中读取字符串并打印输入的字符串,但它会受到 缓冲区溢出 as get()不做任何数组绑定测试。get()继续读取,直到看到换行符。 为了避免缓冲区溢出,应该使用fgets()而不是get(),因为fgets()确保读取的字符不超过MAX_LIMIT。
C
#define MAX_LIMIT 20 void read() { char str[MAX_LIMIT]; fgets (str, MAX_LIMIT, stdin); printf ( "%s" , str); getchar (); return ; } |
注: fgets()存储’字符,因此必须由程序员明确地删除它。因此,一般建议您的str可以存储至少(MAX_LIMIT+1)个字符,如果您打算保留换行符。这样就有足够的空间将空终止字符“”添加到字符串的末尾。
如果不打算保留换行符,那么可以简单地执行以下操作-
C
int len = strlen (str); // Remove the '' character and replace it with ' ' str[len - 1] = ' ' ; |
请随意阅读更多关于gets()和fgets()的信息 在这里 .
如果您发现上述文章中有任何不正确之处,或者您想分享有关上述主题的更多信息,请发表评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END