当我尝试编译以下代码时,我收到一个错误:“在参数 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/

10-11 23:08
查看更多