4

我想创建一个字符串数组。这是代码:

#include <stdio.h>
int main(void){
  char str1[] = {'f','i'};
  char str2[] = {'s','e'};
  char str3[] = {'t','h'};
  char arry_of_string[] = {str1,str2,str3};
  printf("%s\n",arry_of_string[1]);
  return 0;
}

这是行不通的行:

char arry_of_string[] = {str1,str2,str3}; 

我该如何纠正?

4

5 回答 5

6

如果您想创建一个字符串数组,则缺少一个星号,并以零结尾:

char str1[] = {'f','i','\0'};
char str2[] = {'s','e','\0'};
char str3[] = {'t','h','\0'};
char *arry_of_string[] = {str1,str2,str3};

还有一种更简单的方法来处理单个字符串:

char str1[] = "fi";
char str2[] = "se";
char str3[] = "th";
char *arry_of_string[] = {str1,str2,str3};

当您使用char x[] = "..."构造时,字符串文字的内容(包括终止零)被复制到允许写入的内存中,产生与char x[] = {'.', '.', ... '\0'}构造相同的效果。

于 2012-07-27T12:15:44.537 回答
2

你可以像这样使用它:(注意,如果你想打印一个字符数组,你必须用'\0'终止它)

int main()
{
    char str1[] = {'f','i','\0'};
    char str2[] = {'s','e','\0'};
    char str3[] = {'t','h','\0'};
    char* arry_of_string[] = {str1,str2,str3};

    for (int i=0;i<3;i++)
    {
        printf("%s\n",arry_of_string[i]);

    }
    return 0;

}
于 2012-07-27T12:20:17.357 回答
1

您可能在这里寻找指针而不是直接数组。

char *arry_of_string[] = {str1,str2,str3};

数组是值的集合,指针是包含值的地址列表,因此 char 指针是指向包含字符串(字符数组)的数组地址的指针。和呼吸

于 2012-07-27T12:17:52.337 回答
1

你可以使用:

const char *array_of_string[] = {"fi", "se", "th"};

int i;
for (i=0;i<3;i++) {
    printf("%s\n", array_of_string[i]);
}

如果你想简洁...

于 2012-07-27T12:18:21.927 回答
0

当您将字符串指定为

char* myString = "abcd";

它创建一个数组类型的指针,并指向字符数组的基地址或第 0 个元素。所以 myString 指向 a。使用 char* 很有用,因为 c 提供了一种打印整个数组的好方法

printf("%s",myString);

当您不知道或不想指定 char 数组的长度时,指针也很有用。如果你这样做,你的问题应该得到解决

  char *str1 = "fi";
  char *str2 = "se";
  char *str3 = "th";
  char* arry_of_string[] = {str1,str2,str3};
  int i;

  for (i=0;i<3;i++)
  {
    printf("%s\n",arry_of_string[i]);
  }
  return 0;

如果您满意,请随时标记已回答的问题。

于 2012-07-27T16:05:25.560 回答