Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
将从函数返回的数组分配给一行2d数组C编程_C_Arrays_Function - Fatal编程技术网

将从函数返回的数组分配给一行2d数组C编程

将从函数返回的数组分配给一行2d数组C编程,c,arrays,function,C,Arrays,Function,我有一个返回缓冲区数组的函数。调用函数有一个2d数组,我只需要将返回的数组分配给2d数组的特定行。我的代码不起作用。请帮我理解我的错误 在调用函数中: char buff[5][BUFF_SIZE] = {{0}}; char statement[] = "USE THIS STATEMENT;"; char name[] = "some_name"; int value1 = 90; double value2 = 20; /**The statement below causes the

我有一个返回缓冲区数组的函数。调用函数有一个2d数组,我只需要将返回的数组分配给2d数组的特定行。我的代码不起作用。请帮我理解我的错误

在调用函数中:

char buff[5][BUFF_SIZE] = {{0}};
char statement[] = "USE THIS STATEMENT;";
char name[] = "some_name";
int value1 = 90;
double value2 = 20;

/**The statement below causes the error that array is not assignable **/
buff[0] = function(statement, name, value1, value2));   
if( buff[0] != NULL)
   // do stuff
功能:

char *function(char *statement, char *name, int value1, double value2)
{
    size_t size = BUFF_SIZE;

    char *buff = malloc (size);
    int nchars;
    if (buff == NULL)
        return NULL;

    /* Try to print in the allocated space. */
    nchars = snprintf(
                      buff,
                      BUFF_SIZE,
                      statement,
                      value1,
                      value2,
                      name
                      );
    if (nchars >= size)
    {
        /* Reallocate buffer now that we know
         how much space is needed. */
        size = nchars + 1;
        buff = realloc (buff, size);

        if (buff != NULL)
              /* Try again. */
              snprintf(
                      buff,
                      size,
                      statement,
                      value1,
                      value2,
                      name
                    );
    }
    /* The last call worked, return the string. */
    return buff;
}
多谢各位!
编辑:更正了第二次调用snprintf时的错误。您有以下声明:

char buff[5][BUFF_SIZE] = {{0}};
这是一个由
字符组成的二维数组。但是您的函数返回一个
char*
,它与
buff
的行不兼容,因为它们没有类型
char*
。因此,将您的声明替换为:

char *buff[5] = {NULL};
它是指向
char
的指针数组(本例中为5个)。然后为其分配内存:

for (i = 0; i < 5; i++)
{
    buff[i] = malloc (size*sizeof(char));    //or just malloc(size);
    if (buff[i] == NULL)
        printf ("Error allocating memory\n");
}
(i=0;i<5;i++)的

{
buff[i]=malloc(size*sizeof(char));//或者只是malloc(size);
if(buff[i]==NULL)
printf(“分配内存时出错”);
}

指针不是数组,数组不是指针。不要混淆它们。它不能分配给数组本身
charbuff[5][buff_SIZE]={{0}-->
char*buff[5]={NULL}似乎您想要
char*buff[buff\u SIZE]={NULL}
(指向char的指针数组)而不是
charbuff[5][buff_SIZE]={{0}一个2D字符数组感谢@BLUEPIXY和@Keine Lust。最初我尝试使用
char*buff[5]
,但它需要mallocing,这确实让我在2d数组中遇到更多困难;因此,我留下了一个简单的2d数组,而不是指针(否则调用函数不起作用,我不知道如何修复它-仍在学习)。所以现在我必须找到让每一行指向函数返回的数组的方法。当你重新分配缓冲区时,会出现一个错误。对
snprintf()
的第二次调用没有使用较大的缓冲区大小。它仍然使用
BUFF_SIZE
而不是新的更大的
SIZE
。非常感谢!我读到的关于将内存分配给2d数组的所有内容都需要使用指针到指针,这是一个我仍然需要学习的主题。@Vitale很高兴我提供了帮助!实际上,指针的指针是内存分配的一个非常热门的话题!