创建一个字符串数组而不分配每个字符串

时间:2017-08-20 19:47:28

标签: c arrays

我想弄清楚如何创建一个字符串数组(考虑到我知道每个字符串的最大长度)。

char** strings = NULL;
strings = malloc (5*sizeof(char*));

一旦我这样做了,我怎么才能填充数组而不需要分别分配每个字符串?假设我知道字符串的最大长度是20,我该怎么设置它?

在分配字符串后,我希望执行以下操作:

strings[0] = "string";
strings[1] = "another string";

由于

2 个答案:

答案 0 :(得分:1)

您可以声明指向char的指针数组,然后为这些指针指定字符串文字

char *strings[5]; 

strings[0] = "string";
strings[1] = "another string"; 
/* ... */ 

但请注意,这些字符串将是不可变的。

您还可以使用char数组

数组
char strings[5][20];    // As you know max length of string is 20
strcpy(strings[0], "string");
strcpy(strings[1], "another string");
/* ... */

后者的一个优点是字符串是可变的。

答案 1 :(得分:0)

如果您知道每条线的最大尺寸,并且您知道最大线数,则可以简单地定义一个二维的字符数组,即char arr[5][20+1]。然后,您将拥有最多5行的保留空间,每行最多包含20个字符(+ null char)。 您还可以定义表示此类行的类型别名(如果您愿意):

#define MaxLineLength 20
typedef char Line[MaxLineLength+1];

int main() {

    Line input = { 0 };
    scanf("%20s", input);

    Line a[5] = { 0 };
    strcpy(a[0], input);
    strcpy(a[1], "string1");

    return 0;
}