qq_41676225 2019-03-29 16:39 采纳率: 0%
浏览 1284

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 2019-03-29 16:54
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services