我正在尝试创建一个字符串数组,并将其打印出来。听起来很简单,但对我没有任何帮助。
第一次尝试是:
int main(){
char ls[5][3]={"aba","bab","dad","cac","lal"};
printf("Das hier: %s", ls[1]);
return 0;
}
但是输出是:
Das hier: babdadcaclal a
即使只是:
bab
下一次尝试是在搜索后,使用:
char* ls[5][3]=.....
相反。打印:
Das hier: pP@
我大约一天前都在寻找这个问题,我想问题可能出在我的编译器上,但是我不确定......
希望有人知道该怎么做,因为我没有主意。如果这很重要,我正在使用gcc编译器。
答案 0 :(得分:6)
此"bab"
是一个字符串,结尾处有一个不可见的终止符'\0'
,即大小4。
要解决此问题,请更改为
char ls[5][4]={"aba","bab","dad","cac","lal"};
然后,为了提高可维护性,请使用David C. Rankins的建议, 创建一个隐式大小的TLA数组:
char ls[][4]={"aba","bab","dad","cac","lal"};
要使用该变量,请使用此变量设置循环:
size_t n;
n = sizeof ls / sizeof *ls;
答案 1 :(得分:3)
C中的字符串以null终止,这意味着您需要在字符数组的末尾再增加一个字节来标记其终止。否则,您将找不到字符串实际结束的位置。
例如,
如果我有字符串"aba"
,那么在内存中应该是这样的:
'a','b','a','\0'
所以您应该将数组定义为:
char ls[5][4]={"aba","bab","dad","cac","lal"};