增加C中字符串数组中的元素数
我是学习C语言(不是C++)的初学者,我试图定义一个动态字符串数组,但在添加元素时遇到了困难 我尝试将数组定义为:增加C中字符串数组中的元素数,c,dynamic-arrays,realloc,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 *)); 返回错误:“赋值从指针生成整数而不进行强制转换”。我做错了什么 谢谢, 法比奥简短回答:
char **e = malloc(3 * sizeof(char *));
e[0] = "abc";
e[1] = "def";
e[2] = "ghi";
它已成功运行,但正在尝试使用以下命令调整其大小:
**e = realloc(e, 4 * sizeof(char *));
返回错误:“赋值从指针生成整数而不进行强制转换”。我做错了什么
谢谢,
法比奥简短回答:
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 *));
简短答复:
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 *));
这是经过改进的代码:
#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]);
}
#包括
#包括
#包括
内部主(空)
{
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”);
看跌期权(e[0]);
看跌期权(e[1]);
看跌期权(e[2]);
}
在代码中发现一些问题:
要为指针分配内存,请写入ptr=malloc(1)
,而不是malloc(ptr,1)
e
是“指向字符的指针”,而e[0]
到e[2]
是“指向字符的指针”。因此,当mallocing e时,使用sizeof(char*)
,当mallocinge[x]'时,使用sizeof(char)`代替
*e=“abc”代码>仅复制字符串文本的地址,而不是它包含的值。要复制整个字符数组,必须编写strcpy(e[0],“abc”)代码>
这是经过改进的代码:
#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]);
}
#包括
#包括
#包括
内部主(空)
{
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”);
看跌期权(e[0]);
看跌期权(e[1]);
看跌期权(e[2]);
}
在代码中发现一些问题:
要为指针分配内存,请写入ptr=malloc(1)
,而不是malloc(ptr,1)
e
是“指向字符的指针”,而e[0]
到e[2]
是“指向字符的指针”。因此,当mallocing e时,使用sizeof(char*)
,当mallocinge[x]'时,使用sizeof(char)`代替
*e=“abc”代码>仅复制字符串文本的地址,而不是它包含的值。要复制整个字符数组,必须编写strcpy(e[0],“abc”)代码>
去掉作业中的**
:e=realloc(e,4*sizeof(char*)编码>并在使用前检查malloc()
和realloc()
的返回值。这两个函数都可能失败,如果失败,则使用返回值的代码的后续行为将无法定义。Fabio,您是否获得了所需的信息?你打算接受答案吗?去掉作业中的***
:e=realloc(e,4*sizeof(char*)编码>并在使用前检查malloc()
和realloc()
的返回值。这两个函数都可能失败,如果失败,则使用返回值的代码的后续行为将无法定义。Fabio,您是否获得了所需的信息?您要接受答案吗?如果realloc
失败并返回NULL
则会丢失原始数组。首先将realloc
的结果存储在临时变量中。如果realloc
失败并返回NULL
则会丢失原始数组。首先将realloc
的结果存储在一个临时变量中。孙庆尧,那么我们是否需要为数组的每个元素分配内存?@FábioSoldáNo。例如,e[0]=malloc(4*sizeof(char))
为其所有元素分配了内存:e[0],e[1],e[2],e[3]孙庆尧,那么我们是否需要为数组的每个元素分配内存?@FábioSoldáNo。例如,e[0]=malloc(4*sizeof(char))代码>已为其所有元素分配内存:e[0]、e[1]、e[2]、e[3]