2014-09-24 47 views
3

这是一个非常简单的问题,但我不知道如何执行此操作。将值附加到c数组

例如,我有称为Array包含值[1,2,3,4,5,6]阵列,并且我想使其包含[1,2,3,4,5,6,7]添加第七值,7,到阵列。

有没有这样的功能?我是否需要包含任何额外的头文件?任何帮助,将不胜感激。

+1

这是不可能的或动态添加元素大小已经确定时声明的数组。因此,或者事先将大小设置为可以添加的边距,然后将其复制并添加为由'malloc(calloc或realloc)'确保的数组区域的替代方案。 – BLUEPIXY 2014-09-24 02:57:23

回答

3

如果宣布为一个普通数组:

int Array[] = {1,2,3,4,5,6}; 

那么你就不能多值添加到它。如果有提前提供了一些空间,然后你可以添加更多的值:

int Array[7] = {1,2,3,4,5,6}; 
Array[6] = 7; 

如果使用C++,我会建议使用的std ::载体,但它并没有在C

1

都能跟得上存在。没有关于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; 
} 
0

您需要为<stdlib.h>使用malloc和realloc函数。基本思路是先分配一定的空间,然后在发现阵列不够大时放大阵列。

-1
#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; 
} 
+0

这很混乱。连续调用“append”时,它正在泄漏内存。此外,为什么不直接从开始使用指针然后使用'realloc'? – 2014-09-24 08:22:57

+0

@undur_gongor _连续调用append,它正在泄漏内存._当然是错误的用法。 – BLUEPIXY 2014-09-24 08:29:14

+0

_为什么不从开始使用指针,然后直接重新分配?_这是因为它假定数组已被传递。 – BLUEPIXY 2014-09-24 08:29:36