C语言,用指针指向一个地址,从这个地址开始输入数据,超过五个出错

#include <stdio.h>
void main(){
char a=' ';
char *p=&a;
char c;
int i=0;
while((c=getchar())!='\n'){
*p=c;
p++;
i++;
}
printf("output:\n");
while(i!=0){
printf("%c",*(--p));
i--;
}
}
为什么输入五个以内不出错,超过5个以上就会出错?

char *p=&a;//p指向的是a的首地址。当你++后,便指向它的下个地址,这样是不安全的,也就是说非法的指向了不属于你的内存(因为你p只拥有a这个内存)。前面5个数对,只是意外。你要输入多个字符都是正常的,那必须给p分配足够的内存空间。比如讲a定义成数组,或者malloc内存。追问

如果定义成数组,大小就固定了,如果我输入多了也会出错,那该怎么办?怎么能让我想输入多少就输入多少呢

追答

链表。这个就可以动态的给指针分配内存了。书上有它的用法。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-25
#include <stdio.h>
void main(){
//声明一个数组,这样编译时会分配一段连续的内存空间
char a[10];
char *p=a;
char c;
int i=0;
while((c=getchar())!='\n'){
*p=c;
p++;
i++;
}
printf("output:\n");
while(i!=0){
printf("%c",*(--p));
i--;
}
}
第2个回答  2013-10-25
这个是运气问题,a分配的内存正好在后5个的地方,写入非法,换个环境或者不同时间运行,可能又是不同表现
相似回答