从数组中删除一些元素并在C中重新调整大小数组

时间:2016-01-27 18:18:36

标签: c arrays

此致
我想从我的数组中删除一些元素并重新调整大小。
例如我的数组是:

char get_res[6] = {0x32,0x32,0x34,0x16,0x00,0x00};  

现在我想在0x16之后删除元素,所以我的欲望数组是:

  

get_res [] = {0x32,0x32,0x34,0x16};

什么是解决方案?

3 个答案:

答案 0 :(得分:7)

您无法在C中调整数组大小(例如,与Python不同)。要真正调整大小,至少从API用户的角度来看,请特别使用malloccallocreallocfreerealloc )。

无论如何,"调整大小"可以使用

模拟数组
  • 分隔符;例如,像0xff这样的分隔符可以标记数组中有效数据的结尾

    示例:

    #define DELIMITER 0xff
    
    print_data(char* data) {
        for (size_t i = 0; data[i] != DELIMITER; ++i)
            printf("%x", data[i]);
    }
    
  • 会员柜台;从数组的开头开始计算有效数据的数量

    示例:

    size_t counter = 5;
    
    print_data(char* data) {
        for (size_t i = 0; i < counter; ++i)
            printf("%x", data[i]);
    }
    

注意:

  • 使用unsigned char表示二进制数据。 char可能是别名signed char,您可能遇到问题,因为signed char包含符号位。

答案 1 :(得分:3)

无需“删除”它们。只是不要访问它们。假装他们不存在。与堆栈类似,当您从堆栈顶部“弹出”一个值时,您只需递减堆栈指针。

答案 2 :(得分:0)

在C语言中操作数组并不容易,就像C ++中的vector或Java中的List一样。没有&#34;删除元素&#34;在C.我的意思是你必须自己完成这项工作,即创建另一个数组,只复制你想要这个新数组的元素,并释放前一个数组占用的内存。

你能做到吗?你想要代码吗?

编辑:

试试吧。它只是一个模拟情况的简单程序。现在,您必须查看示例并使其适应您的代码。

#include <stdio.h>
#include <stdlib.h>
int main() {
    char get_res[6] = {0x32,0x32,0x34,0x16,0x00,0x00};
    char target = 0x16;
    int pos, i, length = 6; // or specify some way to get this number
    for(i = 0; i < length; i++)
        if(get_res[i] == target) {
            pos = i;
            break;
        }
    pos = pos + 1; // as you have to ignore the target itself
    char *new_arr = malloc(pos);
    for(i = 0; i < length; i++) {
        new_arr[i] = get_res[i];
        i++;
    }
    for(i = 0; i < pos; i++)
        printf("%c ", new_arr[i]);
    return 0;
}