将从函数返回的数组分配给一行2d数组C编程
我有一个返回缓冲区数组的函数。调用函数有一个2d数组,我只需要将返回的数组分配给2d数组的特定行。我的代码不起作用。请帮我理解我的错误 在调用函数中:将从函数返回的数组分配给一行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
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很高兴我提供了帮助!实际上,指针的指针是内存分配的一个非常热门的话题!