【问题标题】:Initialize string array in C在 C 中初始化字符串数组
【发布时间】:2021-03-15 07:56:42
【问题描述】:

我想知道如果有人给我一个包含很多单词的输入文件:

如:“AB1CDE1 FG2HIJ2 KL3MNO3”

我想将每个单词放入一个 char 数组中,结果输出将是:

打印这个 ->

  • 数组[0] = "AB1CDE1"
  • 数组[1] = "FG2HIJ2"
  • 数组[2] = "KL3MNO3"

我需要为此分配内存。

如果我使用char *array = (char*)malloc(sizeof(*array) * num_arrays),这不会只给我每个输入的第一个值吗?

如何初始化这个数组以存储每个数组中的所有值?

(我是 C 编码的新手,所以可能是一个非常简单的问题。)

【问题讨论】:

    标签: arrays c string


    【解决方案1】:

    您可以使用指向字符数组的指针,然后使用malloc 分配足够的空间。

    代码示例

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main() {
        char (*array)[8] = malloc(3u * sizeof(char [8]));
    
        strcpy(array[0], "AB1CDE1");
        strcpy(array[1], "FG2HIJ2");
        strcpy(array[2], "KL3MNO3");
    
        printf("array[0] = %s\n", array[0]);
        printf("array[1] = %s\n", array[1]);
        printf("array[2] = %s\n", array[2]);
    
        free(array);
        return 0;
    }
    

    运行

    ammarfaizi2@integral:/tmp$ gcc test.c -o test
    ammarfaizi2@integral:/tmp$ ./test
    array[0] = AB1CDE1
    array[1] = FG2HIJ2
    array[2] = KL3MNO3
    

    【讨论】:

    • 使用malloc时3u是什么意思?是我使用的具体数字吗?我了解 3 但不了解 u
    • u 的意思是“无符号整数”,你不需要它。 malloc(3 * ... 就够了。
    • 是的,它是无符号整数。不严格要求,只是我的习惯强调参数是无符号类型。
    • 我更喜欢char (*array)[8] = malloc(3u * sizeof *array);,这样当你需要更长的字符串时,只有一个地方可以改变。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2019-12-08
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多