当我尝试编译以下代码时,我收到一个错误:“在参数 1 中键入错误到 'allocate';找到 'char * *',预期为 'char *”(<<<<
#include <stdio.h>
#include <string.h>
void allocate(char *dt);
int main(void)
{
char *data[3];
allocate(data); <<<<<
return 0;
}
void allocate(char *dt)
{
int i;
char buf[] = "A test string";
for (i = 0; i < 3; i++){
strcpy(&dt[i], buf);
printf("%s\n", dt[i]);
}
}
我的理解是,我应该这样调用分配:allocate(&data) 但是这样我收到以下错误:“在参数 1 中输入错误到 'allocate'; found 'char * (*)[3]', expected 'char * '”。
很明显,我正在尝试使 *data[] == buf 的内容。
最佳答案
看起来分配试图动态分配三个字符串并将它们分配给三个 char*
指针数组的每个成员。
当您将数组作为您想要的函数参数传递时,数组会衰减为指针,因此 allocate
的声明需要是 void allocate(char**)
。传入 data
将传入指向数组第一个元素的指针,即指向 char*
的指针。
在分配中,您需要为新字符串分配一些内存。我假设这是一个测试示例,您确实希望为数组的每个成员提供单独的字符串副本。
当然,此时您可能需要一个 deallocate
函数,并确保始终调用它来为新的 free
执行相应的 malloc
。
void allocate(char** dt)
{
int i;
size_t len;
char buf[] = "A test string";
len = sizeof buf;
for (i = 0; i < 3; i++)
{
dt[i] = malloc(len);
if (dt[i] != NULL)
{
memcpy(dt[i], buf, len);
printf("%s\n", dt[i]);
}
}
}
关于c - 初始化指向 char 的指针数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1149458/