【问题标题】:Reassigning strings involving pointers in C在 C 中重新分配涉及指针的字符串
【发布时间】:2013-04-25 13:13:12
【问题描述】:

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

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类型(我不知道这是否与问题有关)。我不知道我该如何解决这个问题。有人可以帮忙吗?

【问题讨论】:

  • 不能通过赋值操作符复制一个 C 数组。您需要 memcpy() 从一侧到另一侧的内容,或者将数组埋在结构中并使用结构副本。
  • strcpy() 也可以吗?如果是这样,那么我应该例如写: strcpy(arr1[l], temp1);而不是:arr1[l] = temp1;?
  • 我让它工作了。非常感谢。

标签: c arrays pointers variable-assignment


【解决方案1】:
arr1[l]

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

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

char *temp = arr2[l];

不复制内容,所以一个

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

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

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多