将指针的字符数组中的值重新分配给该数组中的其他位置?

时间:2015-07-22 19:22:28

标签: c arrays pointers

在C中如何在同一个数组中指向位置i的char数组中分配位置[i-1]?

例如,假设我已声明char *word[m->words_in_msg+1];

如果我想将i-1的位置分配给我,我该怎么做?我目前有一个for循环:

    for (int i = 2; i < m->words_in_msg; i++){
         &word[i - 1] = &word[i];
    }

但是,这给了我编译错误“作为赋值左操作数所需的左值”。我认为这是因为它正在读取左侧&word[i - 1]作为指针位置而不是值,但我不确定如何告诉它存储在该位置的值是我想要重新分配的值。

感谢任何帮助,谢谢!这个C指针机制并不强大。 :P

3 个答案:

答案 0 :(得分:1)

首先,不清楚这些指针是否是动态分配的。如果它们是动态分配的,并且数组是指针的所有者,那么代码将看起来像

free( word[1] );
for (int i = 2; i < m->words_in_msg; i++)
{
     word[i - 1] = word[i];
}

如果指针没有动态分配或者数组不是指针的所有者那么你可以简单地写一下

for (int i = 2; i < m->words_in_msg; i++)
{
     word[i - 1] = word[i];
}

考虑到您可以使用标头memmove

中声明的标准函数<string.h>

答案 1 :(得分:0)

你已经宣布了一个指针数组,你只需要传递地址,word[some_index]已经拥有它。

word[i - 1] = word[i];

答案 2 :(得分:0)

如果要将每个元素放到下一个位置,则不应从头到尾迭代。否则,在移动之前,您将覆盖下一个位置的元素。