这是一个非常简单的问题,但我不知道如何执行此操作。将值附加到c数组
例如,我有称为Array
包含值[1,2,3,4,5,6]
阵列,并且我想使其包含[1,2,3,4,5,6,7]
添加第七值,7
,到阵列。
有没有这样的功能?我是否需要包含任何额外的头文件?任何帮助,将不胜感激。
这是一个非常简单的问题,但我不知道如何执行此操作。将值附加到c数组
例如,我有称为Array
包含值[1,2,3,4,5,6]
阵列,并且我想使其包含[1,2,3,4,5,6,7]
添加第七值,7
,到阵列。
有没有这样的功能?我是否需要包含任何额外的头文件?任何帮助,将不胜感激。
如果宣布为一个普通数组:
int Array[] = {1,2,3,4,5,6};
那么你就不能多值添加到它。如果有提前提供了一些空间,然后你可以添加更多的值:
int Array[7] = {1,2,3,4,5,6};
Array[6] = 7;
如果使用C++,我会建议使用的std ::载体,但它并没有在C
都能跟得上存在。没有关于C中数组的大小或占用元素数量的信息。您可以设计一个结构和一个这样做的过程,但该语言不会为您执行此操作。
struct cvector
{
int *content;
int occupied;
int size;
};
void cvector_init(struct cvector *v)
{
v->content = malloc(sizeof *(v->content) * 16;
v->size = 16;
v->occupied = 0;
}
void cvector_kill(struct cvector *v)
{
free(v->content);
}
// returns true if an error occurred, as is the style with linux syscalls.
int cvector_append(struct cvector *v, int value)
{
if (v->occupied == v->size)
{
int new_size = v->size * 1.75;
int *new_content = realloc(v->content, new_size);
if (new_content == NULL) return 1;
v->content = new_content;
v->size = new_size;
}
v->content[v->occupied++] = value;
return 0;
}
您需要为<stdlib.h>
使用malloc和realloc函数。基本思路是先分配一定的空间,然后在发现阵列不够大时放大阵列。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *append(int size, int a[size], int value){
int *ret = malloc((size+1)*sizeof(int));
memcpy(ret, a, size*sizeof(int));
ret[size] = value;
return ret;
}
int main(void){
int Array[] = {1,2,3,4,5,6};
int size = sizeof(Array)/sizeof(*Array);
int *a = append(size++, Array, 7);
int i;
for(i=0;i<size;i++){
printf("%d\n", a[i]);
}
free(a);
return 0;
}
这是不可能的或动态添加元素大小已经确定时声明的数组。因此,或者事先将大小设置为可以添加的边距,然后将其复制并添加为由'malloc(calloc或realloc)'确保的数组区域的替代方案。 – BLUEPIXY 2014-09-24 02:57:23