你这个程序代码写的真的是。。
佩服你。
main()
{int a;
gets(a);
puts(a);
}
我想问你数据类型你学了没有。
gets来处理什么。。
【1】函数:gets(字符指针) 【2】头文件:stdio.h(c中),c++不需包含此头文件 【3】原型:char*gets(char*buffer);
你申明了一个整数的类型的变量来放字符。
明显的内存是符合的啊,虽然是新手但还是按照书上正规的来写代码。
虽然你这样貌似符合你的要求。但具体分析是完全不对。
int a; 你没有初始化,
你可以printf("%d",a); 看看里面放的什么, 是一个蛮大的数,也是不确定的。我们叫他垃圾值。
不要用puts 这里。
我来给你分析你的程序,做了什么啊。
int a; 申明了一个变量。
gets(a); 你的本意是来给a赋值。 你用gets来进行给一个整数来赋值,从上面我们就知道char*gets(char*buffer);
参数是一个指针,就是说指向一个存储字符的一个缓冲区(新手完全可以理解成为数组)。
那么你的a 是上面是上面是什么意思呢,经过测试你的编译器完全把a的值当成一个指针来处理了。当成一个地址来处理了
puts(a); 正好你用的是puts 又把的a的值当成地址来处理。输出对应的地址的值。
所以你这样完全是错误的。
这里的a的值 是一个垃圾值 并不是a的地址. 会把你想给a赋值的赋给一个未知的内存里面。这样貌似很危险。具体的我还没有遇到过。
你不行的话可以写一下代码
/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{int a;
char *str = a;
gets(a);
puts(a);
puts("看一下");
printf("%s\n",a);
printf("%d\n",a);
}
你现在可能是新手,没有注意这么多。
main()
{int a;
scanf(''%d'',a);
puts(a);
}
你这个验证了了我说话 把a的值当成地址来处理了。
当按照这个地址去取值的时候,却发现根本不存在这样的地址。
编译器就提示我内存不可读。