qq_41676225
qq_41676225
采纳率0%
2019-03-29 16:39 阅读 1.1k

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条回答 默认 最新

  • mym2018 mym2018 2019-03-29 16:54

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

    点赞 评论 复制链接分享
  • weixin_44111368 weixin_44111368 2019-03-29 17:55

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

    点赞 评论 复制链接分享

相关推荐