C 二维char数组 ,取一个字符串时,其后面字符串会被拼接在该字符串后的问题

先看代码


char letters[10][4] = {
    {' ', ' ', ' ', ' '}, //0
    {' ', ' ', ' ', ' '}, //1
    {'a', 'b', 'c', ' '}, //2
    {'d', 'e', 'f', ' '}, //3
    {'g', 'h', 'i', ' '}, //4
    {'j', 'k', 'l', ' '},//5
    {'m', 'n', 'o', ' '},//6 
    {'p', 'q', 'r', 's'},//7
    {'t', 'u', 'v', ' '}, //8
    {'w', 'x', 'y', 'z'} //9
};

int main(){
	char * Myletters = letters[5];
	printf(Myletters);
	printf("\n");
	Myletters = letters[6];
	printf(Myletters);
}

输出:

jkl mno pqrstuv wxyz
mno pqrstuv wxyz
-------------------------------- Process exited after 1.101 seconds with return value 0 请按任意键继续. . .

取出来的明明是一个char* Myletters,但不知道为何把该二维数组中后续的所有内容都拼接起来了

于是猜测由于二维数组中地址是连续的,如果没有’\0‘,计算机也无法判断这个字符串到哪里结束。

然后我们给它加上’\0’,再试一下

char letters[10][5] = {
    {' ', ' ', ' ', ' ',0}, //0
    {' ', ' ', ' ', ' ',0}, //1
    {'a', 'b', 'c', ' ',0}, //2
    {'d', 'e', 'f', ' ',0}, //3
    {'g', 'h', 'i', ' ',0}, //4
    {'j', 'k', 'l', ' ',0},
    {'m', 'n', 'o', ' ',0},
    {'p', 'q', 'r', 's',0},
    {'t', 'u', 'v', ' ',0}, //8
    {'w', 'x', 'y', 'z',0} //9
};

int main(){
	char * Myletters = letters[5];
	printf(Myletters);
	printf("\n");
	Myletters = letters[6];
	printf(Myletters);
}

输出 正常

jkl
mno


Process exited after 0.4949 seconds with return value 0
请按任意键继续. . .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值