C:动态尺寸的字符串二维数组

时间:2018-10-07 17:34:09

标签: c arrays memory-management malloc c-strings

我对C语言很陌生,也为数组的内存分配和字符串存储为字符数组而感到困惑。

我想创建一个二维数组的字符串,其中包含 n 行,2列和可变大小的字符串长度。所以它的结构看起来像这样。

char people = {
    {"name1..", "info.."},
    {"name2..", "info.."},
    {"name3..", "info.."},
}

我将 n 用作用户输入,所以我知道数组将包含多少行。

当用户使用realloc键入内容时,我将如何使用malloc定义这样的数组并调整为字符串分配的空间大小。 还是有更好的方法将这样的数据存储在C中?

我希望能够像这样使用它:

printf("%s", people[0][0]);
prints: name1..

people[0][0][4] = 'E';
//Change the fifth letter of this element to for example E

我已经尝试了很多事情,但是似乎没有什么能像我想要的那样工作。

1 个答案:

答案 0 :(得分:0)

使用指向char *的指针可以实现您的要求。

请参考以下示例。

char ***arr; // to hold n*2 strings

int n =3;
arr = malloc(n*sizeof(char **));

int i = 0;
for (i =0;i<n;i++)
{
        arr[i] = malloc(2*sizeof (char *)); // to hold single row (2 strings)

        arr[i][0] = malloc(10); // to hold 1st string
        arr[i][1] = malloc(10); // to hold 2nd string

        strcpy(arr[i][0],"name");
        strcpy(arr[i][1],"info");

        arr[i][0][4] = 'E';    // As you wished to change particular char

        printf("%s %s", arr[i][0], arr[i][1]);
        printf("\n");
}

要调整特定字符串的大小,可以使用realloc,如下所示。

char *temp;
temp = realloc(arr[1][0], 100);

arr[1][0] = temp;

免责声明:我尚未添加任何绑定和错误检查。