将字符串数组的二维指针数组传递给C中的函数

时间:2015-09-27 08:19:30

标签: c arrays string pointers

我正在尝试创建一个包含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指针/字符串数组的函数。

2 个答案:

答案 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>