增加C中字符串数组中的元素数量

时间:2016-03-13 01:33:51

标签: c dynamic-arrays realloc

我是C语言(不是C ++)研究的初学者,我正在尝试定义一个动态的字符串数组,但是我在添加一个元素方面遇到了困难。

我试图将数组定义为:

char **e = malloc(3 * sizeof(char *));
e[0] = "abc";
e[1] = "def";
e[2] = "ghi";

它成功运行,但尝试使用以下方法调整大小:

  **e = realloc(e, 4 * sizeof(char *));

返回错误:“赋值从指针生成整数而没有强制转换”。我做错了什么?

谢谢, 法比奥

2 个答案:

答案 0 :(得分:2)

简短回答:

e = realloc(e, 4 * sizeof(char *));

答案很长:

让我们将原始声明char **e = malloc(3 * sizeof(char *));拆分为声明和作业。

char **e;
e = malloc(3 * sizeof(char *));

第一行引入变量e并指定其类型char **。第二行将您放在=符号右侧的表达式赋给新声明的变量。

要为e指定新值,请将第二行修改为:

e = realloc(e, 4 * sizeof(char *));

答案 1 :(得分:0)

这是精炼的代码:

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

int main(void)
{
        char **e = malloc(3 * sizeof(char *));
        e[0] = malloc(4 * sizeof(char));
        e[1] = malloc(4 * sizeof(char));
        e[2] = malloc(4 * sizeof(char));
        strcpy(e[0], "abc");
        strcpy(e[1], "def");
        strcpy(e[2], "ghi");
        puts(e[0]);
        puts(e[1]);
        puts(e[2]);
} 

您的代码中发现了一些问题:

  1. 要为指针分配内存,请写ptr = malloc(1),而不是malloc(ptr, 1)

  2. e是“指向char的指针”,而e[0]e[2]是“指向char的指针”。因此,当mallocing e时,使用sizeof (char *),以及当mallocing e[x]', use sizeof(char)`时。

  3. *e = "abc";仅复制字符串文字的地址,而不是它包含的值。要复制整个char数组,您必须编写strcpy(e[0], "abc");