Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
增加C中字符串数组中的元素数_C_Dynamic Arrays_Realloc - Fatal编程技术网

增加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 *)); 返回错误:“赋值从指针生成整数而不进行强制转换”。我做错了什么 谢谢, 法比奥简短回答:

我是学习C语言(不是C++)的初学者,我试图定义一个动态字符串数组,但在添加元素时遇到了困难

我尝试将数组定义为:

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*)
    ,当mallocing
    e[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*)
    ,当mallocing
    e[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]