我怀疑你展示的代码输出结果与你所展示的不同,它应该输出:
a[0] = "apple"
a[1] = "banana"
a[2] = "banana"
a[3] = "orange"
无论如何...您实际上只需要找到要删除的字符串的索引,然后开始将其后面的字符串向后移动一步。完成后,可以减小数组的大小。
由于您能够执行
a[j] = a[j-1]
,我假设您正在使用指针数组。在这种情况下,没有必要使用
strcpy(a[j], "\0");
,只需将下一个元素向后移动一步即可。如果要删除的字符串是动态分配的,则可能需要释放其内存。
以下是一个示例,可以打印出您期望的输出:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char** argv)
{
int size = 0, capacity = 10, i;
char** array = malloc(sizeof(char*) * capacity);
array[0] = strdup("apple");
array[1] = strdup("banana");
array[2] = strdup("pear");
array[3] = strdup("orange");
size = 4;
for(i = 0; i < size; i++) {
printf("%s\n", array[i]);
}
for(i = 0; i < size; i++) {
if(strcmp(array[i], "pear") == 0) {
free(array[i]);
break;
}
}
for(; i < size; i++) {
array[i] = array[i+1];
}
size--;
printf("\n");
for(i = 0; i < size; i++) {
printf("%s\n", array[i]);
}
return 0;
}
这将打印:
apple
banana
pear
orange
apple
banana
orange
for
循环,以便将所有内容从空位移动? - Jacqlyn