0

如何在 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 字符串的末尾添加 '\0' ..例如:

 char c[100][100]={"this\0","that\0"}
4

3 回答 3

1
  1. 是的,你可以这样声明一个字符串数组。

  2. 不,你不能那样遍历它,你的外部循环的条件很糟糕——一个 string ( char *) 永远不会等于一个 character '\0'。内循环很好。

  3. 不,您不需要添加'\0',这将自动发生。

于 2012-04-08T07:02:25.030 回答
1

如何在C中声明字符串数组

没关系,但是在处理这些字符串时必须非常小心缓冲区溢出

我可以这样穿越吗?

请注意,第一个 for 循环中的条件:for(i = 0 ;c[i] != '\0';++i)可能是错误的,并且会失败,因为c[i]它是一个地址不为 0 的数组。您可能应该按数字迭代外部数组 [直到您读取所有元素],而不是直到您找到一些特定的字符。您可以通过维护一个不同的变量来做到这一点,该变量n将指示数组当前有多少元素。

是否有必要在 eac 字符串的末尾添加 '\0' ..例如:

不 - 编译器将它添加给您,不添加'\0'到字符串就可以了。

于 2012-04-08T07:03:45.980 回答
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]);
    }
}
于 2012-04-08T07:06:07.987 回答