先看代码
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
请按任意键继续. . .