此致
我想从我的数组中删除一些元素并重新调整大小。
例如我的数组是:
char get_res[6] = {0x32,0x32,0x34,0x16,0x00,0x00};
现在我想在0x16之后删除元素,所以我的欲望数组是:
get_res [] = {0x32,0x32,0x34,0x16};
什么是解决方案?
答案 0 :(得分:7)
您无法在C中调整数组大小(例如,与Python不同)。要真正调整大小,至少从API用户的角度来看,请特别使用malloc
,calloc
,realloc
和free
(realloc
)。
无论如何,"调整大小"可以使用
模拟数组分隔符;例如,像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;
}