c - 删除数组中间的元素?

标签 c arrays memory-management dynamic-arrays

我试图从数组中间删除一个元素,然后移动整个内容,但我遇到了一些困难,因为我的测试数组不“正确”。我通过使用 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/

相关文章:

java - 为什么它会跳过数组索引 0?

iphone - 导航 Controller 和包含子 CALayer 的 View 出现内存问题/过度释放

c++ - 如何销毁包含自引用指针的对象?

c - 无法正确解释 c 程序中 system() 的返回值

同一台本地机器上的两个应用程序之间的通信

java.sql.Connection createArrayOf() 返回不支持的功能

c++ - Stroustrup书与C++ Standard之间的明显矛盾

c - 在 HMAC SHA256 中编​​码字符串

c - C 中的堆栈 --- pop() 函数

将字符串复制到动态二维数组中