我是C语言(不是C ++)研究的初学者,我正在尝试定义一个动态的字符串数组,但是我在添加一个元素方面遇到了困难。
我试图将数组定义为:
char **e = malloc(3 * sizeof(char *));
e[0] = "abc";
e[1] = "def";
e[2] = "ghi";
它成功运行,但尝试使用以下方法调整大小:
**e = realloc(e, 4 * sizeof(char *));
返回错误:“赋值从指针生成整数而没有强制转换”。我做错了什么?
谢谢, 法比奥
答案 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]);
}
您的代码中发现了一些问题:
要为指针分配内存,请写ptr = malloc(1)
,而不是malloc(ptr, 1)
。
e
是“指向char的指针”,而e[0]
到e[2]
是“指向char的指针”。因此,当mallocing e时,使用sizeof (char *)
,以及当mallocing e[x]', use
sizeof(char)`时。
*e = "abc";
仅复制字符串文字的地址,而不是它包含的值。要复制整个char数组,您必须编写strcpy(e[0], "abc");
。