gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:33:35 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com