在c中创建动态2-D Char数组

时间:2013-10-30 04:56:14

标签: c arrays

我在文本文件中有以下两行

4

oxd||987||ius||jjk

我想将数据存储在2-dim char数组中。第一行基本上表示数组中的行数,假设数组中的列固定为3.数据将根据||进行拆分。

那么如何声明这样一个动态数组。

1 个答案:

答案 0 :(得分:0)

在C中,没有问题 - 你有VLA。类似的东西:

fgets(buf, sizeof buf, stdin);
int rows = strtol(buf, NULL, 0);

获取行数,然后:

char array[rows][3];

你已经完成了。这是一个完整的(好的,没有错误检查)示例,演示了如何在输入时使用它:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char buf[100];
    fgets(buf, sizeof buf, stdin);

    int rows = strtol(buf, NULL, 0);
    char array[rows][3];

    fgets(buf, sizeof buf, stdin);

    char *s = strtok(buf, "|");
    for (int i = 0; i < rows; i++)
    {
        strncpy(array[i], s, 3);
        s = strtok(NULL, "|");
    }

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

    return 0;
}

示例运行&amp;输出:

$ make example
cc     example.c   -o example
$ ./example < input
oxd
987
ius
jjk