已解决问题 - 浏览137次
下一个已解决问题
过客
121.41.236.*
gets函数
来源:网页搜索
gets函数在存储输入的字符串时有长度限制吗? C语言怎样保证返回地址的函数所返回的地址代表的存储空间不被其他程序使用?
最佳答案 - 由投票者2008-07-31 15:42:04选出
不能保证。此函数在C语言里,读取字符串的一个函数,字符串将要存储的空间是有编程人员给出的!系统不会管你这一块内存是不是有效内存!
比如,
{
int a,b,c;
gets((char *)&a);
printf("%d,%d,%d");
}
如果输入22222<回车>,这样的代码运行结果是什么?
12850,12850,12800
为什么?
int a,b,c;在内存中定义了连续6个字节的存储空间;
gets((char *)&a);要读取控制台输入的字符串,存储到变量a的存储位置上,而输入的22222和结尾0,是6个字节,就是\x32\x32\x32\x32\x32\0,转成a、b、c就是:50*256+50=12850,50*256+50=12850,50*256=12800
其他回答(2)
-
gets函数为c++ 里专门输入字符串的的函数,本身对字符串的长度没有定义,至于是否被其他程序占用空间就不得而知了!
-
字符串没有长度限制,C语言在每一字符串后面都会加上"/0"作为结束符的.
例如:
字符串:"I LIKE C"
在C里面是这样的:"I(空格)LIKE(空格)C/0"
就是这样,怎么会出现存储问题呢?
其他程序使用的内存空间是系统分配好的,如果系统发现C的参数使用某一部分空间,系统会划分新的空间给其他程序使用.这叫协调.

武林高手








