在C中使用字符串数组时出错

时间:2018-08-23 20:23:45

标签: c

我正在尝试创建一个字符串数组,并将其打印出来。听起来很简单,但对我没有任何帮助。

第一次尝试是:

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编译器。

2 个答案:

答案 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"};