访问C中的字符串数组

时间:2012-04-08 06:59:55

标签: c string initialization

如何在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"}

3 个答案:

答案 0 :(得分:1)

  1. 是的,您可以通过这种方式声明字符串数组。

  2. 不,你不能那样遍历它,你的外环上的条件很糟糕 - 一个字符串(char *)永远不会等于一个字符'\0'。内环很好。

  3. 不,您无需添加'\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”

之类的字符串时,编译器会为您添加'\ 0'
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]);
    }
}