对一个字符数组连续用gets函数出现的问题(缓冲区内容补充)
2015-04-26 20:53
489 查看
昨天调试程序(见下面代码)遇到下面一个问题:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201504/cbe9564761bb4dac418d2d197262e040)
咦!!!我还没从键盘输入字符串,他怎么就执行下一步了呢???????
对代码进行调试:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201504/aac6ead41d832ce36ad80fe789fa65b3)
此时内存:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201504/e0f45493ab401e983b4d66b592ee4210)
再点击下一步:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201504/2c57472a51a7d00be9a8de588b443d52)
咦??????数组中的“----->> 0 <<-----”哪来的???百思不得其解!
查阅大量资料原来和缓冲区有关,首先了解下缓冲区:
C++编程对缓冲区的理解
以上内容的连接来自:http://www.cnblogs.com/charm/archive/2010/08/17/1801419.html
虽然有些图片看不到,但是该博主的描述使我获益匪浅!!!
看到这里我们一开始的问题也就迎刃而解了:
由于gets功能如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201504/504e78e4aaa5d470aebc5d1acd195a73)
'\0'====0(值相等---->>>>ASCII的0为NULL),这也就是一开始查看内存,ASCII0存在的原因!!!
#include<stdio.h> int main() { int i = 1; while(i) { char str[100]; printf("please input a str:\n"); gets(str); puts(str); printf("continue:1,break:0\n"); scanf("%d",&i); } return 0; }
咦!!!我还没从键盘输入字符串,他怎么就执行下一步了呢???????
对代码进行调试:
此时内存:
再点击下一步:
咦??????数组中的“----->> 0 <<-----”哪来的???百思不得其解!
查阅大量资料原来和缓冲区有关,首先了解下缓冲区:
C++编程对缓冲区的理解
|
虽然有些图片看不到,但是该博主的描述使我获益匪浅!!!
看到这里我们一开始的问题也就迎刃而解了:
scanf("%d",&i);执行次代码后,1赋值给了i-------->>>>>但换行符enter却留在了缓冲区,下次执行gets函数时,由于缓冲区存在内容,所以gets函数不再等待用户输入,而是直接从缓冲区读取内容。
由于gets功能如下:
'\0'====0(值相等---->>>>ASCII的0为NULL),这也就是一开始查看内存,ASCII0存在的原因!!!
相关文章推荐
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 一个字符变量存储到动态分配内存引发的输入问题解决--连续输入scanf函数存在缓冲区的问题
- JAVA中查询一个词在内容中出现的次数、判断集合中是否包含关键字、查询字符串数组单个字符的长度
- 给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A
- 给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A。
- 编程题--给定一个字符串数组,判断每个字符出现次数
- 编写一个字符串(a~z)过滤函数,对于字形符串中出现的多个相同的字形符,将非首次出现的字符过滤掉
- fopen()函数以"a+"方式打开一个不存在的文件后读写出现问题
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A。
- 函数在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符,函数原型:char *find_char( char const *source, char const *chars);
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 字符串替换空格: 请实现一个函数,把字符数组中的每个空格替换成“%20”。 例如输入“we are happy.”,则输出“we%20are%20happy.”。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)
- 编写函数 void count(char a[],char w[][10],int n,int b[]).功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字符字符看作单词分割
- Js屏蔽按住键盘不停输入内容的问题,实现按住也只能输入一个字符
- hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数
- 数组中字符出现的次数问题
- 数组中字符出现的次数问题