在字符串数组中移动元素,C

时间:2016-02-12 01:48:56

标签: c arrays string

我想将字符串数组中的每个字符串向左移动一个元素:

   char historyArray[HISTORY_DEPTH][COMMAND_LENGTH];

我的两次尝试都不起作用。有人可以向我解释我做错了吗?

for (int i = 1; i < HISTORY_DEPTH; i++) {
            strcpy(historyArray[i-1], historyArray[i]);
        }

for (int i = 1; i < HISTORY_DEPTH; i++) {
            historyArray[i-1] = historyArray[i];
        }

2 个答案:

答案 0 :(得分:2)

将historyArray定义为char *historyArray[HISTORY_DEPTH];这将historyArray定义为字符串指针数组。然后,由于赋值,historyArray [0]指向teststring。作为指针数组,您可以正确处理每个字符串指针。然后,您可以使用malloc缓冲区指针作为数组中的元素。并使用strcpy复制到该缓冲区。

char *historyArray[HISTORY_DEPTH];
// put initialization code here
for (int i = 1; i < HISTORY_DEPTH; i++) {
    historyArray[i-1] = historyArray[i];
}
historyArray[HISTORY_DEPTH-1] = NULL; //empty the last element pointer

现在将指针移动到数组的前一个元素中。

请注意,historyArray [0]的原始内容现在已丢失,如果您使用malloc创建内存,则会导致内存泄漏。因此,应该应用free()。如果它是一个固定的缓冲区并且不需要被释放,那么你就不必担心它。

char historyArray[HISTORY_DEPTH][MAX_SIZE];
for (int i = 1; i < HISTORY_DEPTH; i++) {
    // Or use the memset with strlen(size+1)
    // to ensure that the ending '\0' is also copied
    strcpy(historyArray[i-1], historyArray[i]);
}
historyArray[HISTORY_DEPTH-1][0] = '\0'; // make the last an empty string

第二个的strcpy,将historyArray指向的每个字符串的内容复制到前一个元素指向的缓冲区中,而不移动指针本身。这假设每个缓冲区足够大以容纳字符串。除非你输入一个空字符串,否则最后一个指针继续保持与之前相同的数据。

答案 1 :(得分:0)

你是说如果你有像

这样的字符串

aaa,bbb,ccc

你想要

aaa,ccc,ccc

结果呢?因为你的索引从1开始,我怀疑这不是你的意图。如果是这种情况,这可以使用此

获取bbb,ccc,ccc
for (int i = 0; i < HISTORY_DEPTH-1; i++) {
    strcpy(historyArray[i], historyArray[i+1]);
}