将值附加到c数组

时间:2014-09-24 02:44:11

标签: c arrays

这是一个非常简单的问题,但我不知道该怎么做。

例如,我有一个名为Array的数组,其中包含值[1,2,3,4,5,6],我想在数组中添加第七个值7,使其包含[1,2,3,4,5,6,7] }。

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

4 个答案:

答案 0 :(得分:3)

如果它是一个声明如下的普通数组:

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

然后你就无法为它添加更多值。如果预先提供了一些空间,那么您可以添加更多值:

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

如果您使用了c ++,我建议使用std :: vector,但它在C中不存在。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

答案 3 :(得分:-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;
}