我想将字符串数组中的每个字符串向左移动一个元素:
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];
}
答案 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,cccfor (int i = 0; i < HISTORY_DEPTH-1; i++) {
strcpy(historyArray[i], historyArray[i+1]);
}