c - 初始化指向 char 的指针数组

标签 c arrays pointers

当我尝试编译以下代码时,我收到一个错误:“在参数 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) 但是我收到以下错误:“Type error in argument 1 to 'allocate'; found 'char * (*)[3]', expected '字符 *'”。

很明显,我正在尝试使 *data[] == buf 的内容。

最佳答案

看起来 allocate 正在尝试动态分配三个字符串,并将它们分配给三个 char* 指针数组的每个成员。

当您将数组作为您想要的函数参数传递时,数组会衰减为指针,因此 allocate 的声明需要为 void allocate(char**)。传入 data 将传入指向数组第一个元素的指针,即指向 char* 的指针。

在分配中,您需要为新字符串分配一些内存。我假设这是一个测试示例,您确实希望为数组的每个成员单独复制字符串。

当然,此时你可能会想要一个deallocate函数,并确保总是调用这个函数来为新的malloc执行相应的free s.

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/

相关文章:

c++ - 修改 char *const 字符串

c - 程序堆大小?

c++ - 有人可以帮我理解这个吗?整数 * & pr

c - 如何在不使用数组的情况下找到丢失的数字?

c - 如何用karplus strong算法实现插值延迟线和全通滤波器?

arrays - 如何在 Swift 中访问二维数组中的元素

c - 如何在C中的结构中的双指针中使用malloc()

c++ - 指向下一个/上一个指针的指针

java - 格式化二维数组以获得加法问题的结构

c++ - 函数参数中的 "type name[size]"是什么意思?