如何在C中声明字符串数组 是吗
char str[100][100] ={"this","that","those"};
如果是这样,如何访问值..我可以像这样遍历吗? (它不会给出任何编译错误..但显示一些额外的垃圾字符)
int i ,j;
char c[100][100] = {"this","that"};
for(i = 0 ;c[i] != '\0';++i)
for(j = 0; c[i][j] != '\0';++j)
printf("%c",c[i][j]);
是否有必要在eac string的末尾添加'\ 0'...例如:
char c[100][100]={"this\0","that\0"}
答案 0 :(得分:1)
是的,您可以通过这种方式声明字符串数组。
不,你不能那样遍历它,你的外环上的条件很糟糕 - 一个字符串(char *
)永远不会等于一个字符'\0'
。内环很好。
不,您无需添加'\0'
,这将自动发生。
答案 1 :(得分:1)
如何在C
中声明字符串数组
没关系,但在处理这些字符串时你必须非常小心buffer-overflow
我可以这样穿过吗?
注意第一个for循环中的条件:for(i = 0 ;c[i] != '\0';++i)
可能是错误的,并且会失败,因为c[i]
是一个数组,其地址不是0.你应该用数字迭代外部数组[直到你阅读所有元素],直到你找到一些特定的角色。你可以通过维护一个不同的变量n
来做到这一点,它将指示数组当前有多少个元素。
是否有必要在eac string的末尾添加'\ 0'...例如:
不 - 编译器将它添加到你身上,没有将'\0'
添加到字符串中就可以了。
答案 2 :(得分:1)
c [i]是一个指针,所以它与'\ 0'无关
所以你应该检查c [i] [0]
当您输入“this”
char str[100][100] ={"this","that","those"};
int main()
{
int i ,j;
char c[100][100] = {"this","that"};
for(i = 0 ;c[i][0] != '\0';++i)
{
for(j = 0; c[i][j] != '\0';++j)
printf("%c",c[i][j]);
}
}