关于字符串数组初始化问题

[复制链接]
查看11 | 回复2 | 2017-10-9 04:05:06 | 显示全部楼层 |阅读模式
#include
void main()
{
char a[]="12";
cin>>a;
cout<<a;
}
当我输入1234时可以显示多于1234时不能显示会出现错误 例如 输入12345当输入到5时会出现错误
把char a[]="12";改成a[]="123";也是一样 但改成a[]="1234";时 我输入到123456789,到9时 才会出错 我想问问 字符串数组初始化时是怎么分配的char a[]="12";它有什么规律分配内存单元 是根据a[]后面的字符多少分配的吗 希望解释一下 谢谢
开始看你的程序好像很有道理但是你好像没看懂我的问题当a为2个时只能输入4个3个输入4个 4个输入8个 5个输入8个。。。。。。8个输入12个 是这样的规律希望你解释一下为什么字节满了后一次增加4个字节增加一个不是就够了吗(给'\0'还要占用一个) 不懂 不够你解释的东西让我明白了些别的 谢谢了继续求解中。。。。

回复

使用道具 举报

千问 | 2017-10-9 04:05:06 | 显示全部楼层
我跟你说的就是你的问题的原因。。。因为是32位机器,32位是4个字节,所以编译器在编译的时候进行按4字节对齐,4个字节4个字节的分配,当然就是当a为2个时只能输入4个 3个输入4个 4个输入8个 5个输入8个 。。。。。。8个输入12个。这很难理解么?a[]="12"只给a分配了3个字节你输入1234不报错,只是因为它后面还有两个未分配的字节,这是由于你的机器是32位机,编译器会自动按4位对齐,也就是说虽然没有给a分配后面的字节,但实际上那俩字节也相当于是a的如果a[]="1234",那么a要分配5个字节('\0'还要占用一个),实际要占用8个字节
回复

使用道具 举报

千问 | 2017-10-9 04:05:06 | 显示全部楼层
数组的初始化有两种:第一种:String[]stu=newString[]{"1","2","3"};第二种:String[]stu=newString[3];stu[0]=1;stu[2]=2;stu[3]=3;你的错误好像是没有newchar[]希望对你有帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行