本人刚刚入门C语言,在学习数组的时候发现一个问题,代码如下,实际功能是将字符串中的大写字母转换成小写,并输出大写字母个数
#include "stdio.h"
int main()
{
int i=0,j=0;
char str[i];
scanf("%s",&str[i]);
for(i=0;str[i]!='\0';i++)
if(str[i]>65&&str[i]<97)
{
str[i]+=32;
j++;
}
printf("%s\n",str);
printf("原字符串中大写字母有%d个\n",j);
return 0;
}
编译环境是Linux zephyrus 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:13 UTC 2017 i686 i686 i686 GNU/Linux
问题在char str[i]上,我并没有开辟数组的空间大小,而且sizeof(str[i])显示大小为0,但是打印地址时却可以成功打印出str [i]的地址。
我很迷的一点是,我并没有开辟出这个空间,但是这个空间却有地址,既然有地址,就可以按照地址顺序读入数据,那不就相当于我开辟了一个大小可以随意变化的空间?