gpt4 book ai didi

c - 通过函数操作变长二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:53 25 4
gpt4 key购买 nike

我正在尝试将数据写入可变长度的二维数组,当我调用 myfunc 时,我的程序一直出现段错误,但当我尝试在函数外部执行相同的操作时,它工作正常.我可以说问题是指向 array[0] 的地址不等于指向 data[0] 的地址。有人可以告诉我这个问题的根本原因以及重写 myfun 的正确方法。

void myfun(unsigned char **array){
printf("array = %p, array[0] = %p\n", array, array[0]);
//This line below causes a segfault
strcpy(array[0], "Position0");
}

int main(void) {
int row = rand() % 5 + 1; // random number between 1-5
int col = rand() % 10 + 20; // random number between 20-29
unsigned char data[row][col];

printf("data = %p, data[0] = %p\n", data, data[0]);

//This function call causes a segfault
myfun(data);
printf("%s\n", data[0]);

//This works
strcpy(data[1], "Position1");
printf("%s\n", data[1]);

return 0;
}

最佳答案

由于您显然使用的是 C99 或更高版本以及支持 VLA(可变长度数组)的编译器,因此您可以很容易地正确编写函数:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void myfun(int rows, int cols, char array[rows][cols])
{
printf("array = %p, array[0] = %p\n", array, array[0]);
strcpy(array[0], "Position0");
printf("a[0] = [%s]\n", array[0]);
}

int main(void)
{
int row = rand() % 5 + 1; // random number between 1-5
int col = rand() % 10 + 20; // random number between 20-29
unsigned char data[row][col];

printf("data = %p, data[0] = %p\n", data, data[0]);

myfun(row, col, data);
printf("%s\n", data[0]);

strcpy(data[1], "Position1");
printf("%s\n", data[1]);

return 0;
}

关于c - 通过函数操作变长二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35283924/

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