重新分配涉及C中指针的字符串

时间:2013-05-01 14:18:10

标签: c arrays pointers variable-assignment

这是一个家庭作业问题,我认为这是一个语法问题。我有一个程序,使用一个方法,使用字符数组来表示字符串。我正在尝试将部分数组复制到临时变量中。我传递了这些变量:

int numbers[], char arr1[][20], char arr2[][20], int l, int r

并初始化/复制到临时变量中:

char *temp1;
char *temp2;

temp1 = arr1[l];
temp2 = arr2[l];

此代码编译,我相信它有效。当我尝试将临时变量分配给数组中的位置时,会出现问题。我试过了两个:

arr1[l] = temp1;
arr2[l] = temp2;

arr1[l] = &temp1;
arr2[l] = &temp2;

所有这些都会导致以下错误:

error: incompatible types in assignment

所以显然我没有正确地写这些陈述。两者都是char类型(我不知道这是否与问题有关)。我不知道如何解决这个问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

arr1[l]

arr1[l]是一个数组(具体为char[20])。数组不是可修改的左值,因此它们不可赋值。

您需要将temp指向的数组内容复制到arr1[l]。但是,如果您尝试交换行或类似的东西,则需要分配一些中间存储,因为

char *temp = arr2[l];

不会复制内容,所以

memcpy(arr2[l], source, some_size);

会更改temp指向的内容,arr2[l]的旧内容将会丢失。