C语言中数组开辟空间及使用的问题

本人刚刚入门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]的地址。

我很迷的一点是,我并没有开辟出这个空间,但是这个空间却有地址,既然有地址,就可以按照地址顺序读入数据,那不就相当于我开辟了一个大小可以随意变化的空间?

2个回答

我的理解是char str[i]开辟了空间只不过是值为空

char str[i] 是在内存中给了数组一个空间。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问