gets、scanf 、read函数使用注意事项
2009-03-28 17:44
369 查看
在linux中,使用gets函数编译会报错,但是在vC下却不会,查了一下资料,说是gets不安全,想想确实是。
替代方法是使用fgets函数,这个函数的参数中有定界的参数,所以是安全的。
我在linux使用scanf时,要不断的输入字符串,代码如下:
1 char str[128];
2 while(1)
3 {
4 scanf("%s",str); //当输入直接按回车时,跳出循环,结束程序
5 if(strlen(str)==0)
6 return 0;
7 printf("%s",str);
8 }
9
程序并没有按照我想的运行,当不输入字符按下Enter时,程序还是停止在scanf上继续等待用户输入!
查了半天也没有办法用scanf来实现我要的功能,想了一下用gets吧,结果发现了gets的上面提及的问题 。我还想到用read函数来进行读取,但是读取时会将回车符'\n'也放到缓冲区中,用strlen来测试的话,会发现字符长度为1。fgets也有这个问题的,不过scanf是不会将回车放进缓冲去的。
char str[10]; gets(str);//如果输入字符串的长度>10时,那么就不安全了,访问到了str以外的内存。
替代方法是使用fgets函数,这个函数的参数中有定界的参数,所以是安全的。
我在linux使用scanf时,要不断的输入字符串,代码如下:
1 char str[128];
2 while(1)
3 {
4 scanf("%s",str); //当输入直接按回车时,跳出循环,结束程序
5 if(strlen(str)==0)
6 return 0;
7 printf("%s",str);
8 }
9
程序并没有按照我想的运行,当不输入字符按下Enter时,程序还是停止在scanf上继续等待用户输入!
查了半天也没有办法用scanf来实现我要的功能,想了一下用gets吧,结果发现了gets的上面提及的问题 。我还想到用read函数来进行读取,但是读取时会将回车符'\n'也放到缓冲区中,用strlen来测试的话,会发现字符长度为1。fgets也有这个问题的,不过scanf是不会将回车放进缓冲去的。
相关文章推荐
- 黑马程序员——C语言笔记之scanf函数及使用注意事项
- 嵌入式学习8(scanf函数的注意事项)
- 关于 vector 中 erase 函数的使用注意事项
- 关于使用READ TABLE语句的几点注意事项...(原文来源于网络)
- python引用下标或者使用range函数时时注意事项
- 关于使用READ TABLE语句的几点注意事项
- redis 集群中 Slave-read-only 参数的使用注意事项
- 《Visual C# 最佳实践》第四章 函数 (四):使用函数注意事项
- setbuf函数使用注意事项
- cvThreshold函数使用与注意事项
- cvThreshold函数使用与注意事项
- 使用gets()和scanf()应该注意的地方
- 使用箭头函数的几个注意事项
- Mysql中last_insert_id()函数使用的注意事项
- new与delete函数使用方法以及注意事项
- 【转】使用CRT函数和CreateThread的注意事项
- java 分隔符函数split的使用注意事项
- 使用CRT函数和CreateThread的注意事项
- 使用CTSettingCopyMyPhoneNumber()函数获取电话号码的注意事项