我试图从数组中间删除一个元素,然后移动整个内容,但我遇到了一些困难,因为我的测试数组不“正确”。我通过使用 strcpy 用字符串填充数组来解决该问题。 strcpy上面注释的部分是我之前用过的方法(没用)。有人可以解释一下为什么它不起作用吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *array;
int i=5;
array = (char*)calloc(1024, sizeof(char));
if(array == NULL){
printf("Out of memory\n");
return 0;
}
//array = "Just some test string";
strcpy(array, "Just some test string");
printf("%s\n", array);
memmove(array+i+1, array+i, strlen(array)-i);
array[i] = ',';
printf("%s\n", array);
memmove(array+i, array+i+1, strlen(array)-i);
printf("%s\n", array);
free(array);
return 0;
}
printf 正常工作在注释部分,但是 memmove() 使我的程序崩溃!
最佳答案
如果你有这个:
array = "Just some test string";
然后
1) 你有memory leak由于覆盖了 calloc
'ed 指针。
2) 您正在尝试修改字符串文字。这可能就是它崩溃的原因。修改字符串文字是 undefined behaviour 。它们通常存储在只读存储器中。由于 strcpy()
创建了字符串文字的副本,因此它按预期工作,但此方法失败。
关于c - 删除数组中间的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284072/