我正在尝试创建一个包含20行和20列的字符串表。它具有以下功能。
将值插入表
连接2行并替换为另一行
修改表格中的值
以及其他一些操作
要做到这一点,我试图声明,传递和修改2d字符串,即char
指针的2D数组。这就是我做的。下面的代码只包含我的一小部分代码。
char *first_array[20][20]; //declared 2d array of pointers for storing a table of strings
int modify(char *array1[], char *array2[]) //here i want to pass 2 rows row 1 and row 2
{
int result1 = strcmp(array1[1], "~"); // here i want to access row 1 1st column for string operation
int result2 = strcmp(array2[1], "$");
return result1+result2;
}
int main() {
char *string = "hello";
strcpy(first_array[1][0], string); // insert values into table
strcpy(first_array[1][1], "~");
strcpy(first_array[2][0], string);
strcpy(first_array[2][1], "~");
printf("the result is %d\n", modify(first_array[1], first_array[2]); // pass row1 and row2
return 0;
}
这段代码是否正确? 因为最初我收到了错误
expected ‘char **’ but argument is of type ‘const char **’
但是我以某种方式纠正了它,现在我得到了分段错误。我无法得到预期的结果。
请为我提供适当的代码,用于在上述场景中声明,访问,修改和传递C中2d char指针/字符串数组的函数。
答案 0 :(得分:1)
您应该使用first_array
将内存分配给malloc
,然后执行所需的操作。
喜欢这个 -
first_array=malloc(sizeof(char *)*2); // here used 2 as you need 2 pointer right now
for(int i=1;i<3;i++){
for(int j=0;j<2;j++){
first_array[i][j]=malloc(strlen(string)+1);
}
}
注意 - 但请记住free
已分配的内存。如果没有必要,也不要将其声明为全球。
答案 1 :(得分:0)
使用第一个声明char *first_array[20][20]
,您将创建一个全局2d数组,并为其分配内存,以存储全局变量的内存部分。
所以你有一个指针数组,但他们指的是什么?然后,您必须为字符串分配内存,并为数组中的指针提供字符串位置的地址。
你不能使用strcpy()
,因为你的指针还没有指向任何东西,它可能会保留一个垃圾值,因此会产生一个试图访问不存在或被使用的内存地址的段错误。 / p>