为什么我的C语言程序会出现 程序已经停止工作呢?程序如下

#include<stdio.h>
#include<iostream.h>
void main()
{
char a[]="";
char temp;
char*p;
p=a;
cout<<"input string"<<endl;
scanf("%s",a);
int i=0;

while(*(p+i)!='\0')
{
if(*(p+i)<='Z'&&*(p+i)>='A')
;
else*(p+i)=*(p+i)-32;
i++;
}
i=i-1;
for(i;i>=0;i--)
{

printf("%c\t",*(p+i));
}
cout<<'\n'<<"end----";
}

a的空间不足(它只能确保有1个字符的有效空间)。追问

可以麻烦您具体说一下吗?不是很懂

追答

char a[]="";

换为:
char a[50];
再试试

追问

解决了 还是想请问一下char a[]="";和char a[50];有什么区别?char a[]=""不是 系统自己分配空间吗?

追答

char a[]="";
相当于:
char a[] = {'\0'};

编译器可能给它分配1字符空间,或4字符空间,不会太多。

char a[] =""; 和 char a[50]; 都是在栈中分配内存,栈(局部变量空间)中内存溢出可能会导致其他局部变量被覆盖、甚至函数调用的返回地址被覆盖,程序很可能会挂掉,后果很严重。

局部变量空间是程序自己负责扩展、回收的,上面我说成编译器给它分配也不算错,因为扩展、回收多少个字节是编译器经过计算后设计到程序中的,相关的知识你以后会慢慢明白的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-02-04
scanf("%s",a);改成
cin>>a;
请不要脚踏C和C++两条船追问

回答很风趣但是貌似没什么用

追答

你连输入都不会还在这写程序真是笑话
我就想说这个

void main()
{
char a[100];
char *p;
p=a;
cout='a'))
p[i]=p[i]-32;
i++;
}
for(j=0;j<i;j++)
{
printf("%c",p[j]);
}
cout<<'\n'<<endl;
}
书都没看就想写出东西来,这话你可能不爱听,不过我就是喜欢说。
PS:另一个回答就是一SB

相似回答