在C中动态地为数组分配数字

时间:2009-12-18 13:19:26

标签: c

我想这样做:

char a[5];

//run some code here
//then

a[]={0,1,2,3,4};  //**compiler doesn't like it

但我不想这样做:

a[0]=0;
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=4;

您是否知道在运行时使用数字而不是字符串(即,不是a ="hello")一次填充数组,而不是单独定义每个元素?

谢谢,

拉​​伊德

8 个答案:

答案 0 :(得分:5)

不,没有办法做到这一点。您需要使用循环,或单独分配每个值。

答案 1 :(得分:2)

好吧,你可以设置一个模板,以便以后复制到其中:

#include <stdio.h>
#include <string.h>

static char a_src[] = {0,10,20,30,40};
int main() {
    char a[5];

    memcpy (a, a_src, sizeof(a_src));
    printf ("%d\n", a[3]);
    return 0;
}

运行时输出30。

但这仍然是在编译时从技术上获取数据。如果确实想在运行时(使用计算值)执行此操作,则需要逐个元素地执行此操作。

答案 2 :(得分:2)


char a[5];

//run some code here
//then

static const char a_01234[sizeof(a)] = {0,1,2,3,4};
memcpy(a, a_01234, sizeof(a));

答案 3 :(得分:1)

你可以做memcpy(a, "\0\1\2\3\4", 5);,但这是不好的做法和编码风格。

没有你不能。

答案 4 :(得分:0)

你试过这个:

char a[] = {0, 1, 2, 3, 4};

编译器会自动将其设置为5的数组,并使用与其值和索引对应的每个元素进行初始化。

<强> 编辑: 再看一遍,我意识到你在寻找什么。简而言之,编译器不会接受这一点。

希望这有帮助, 最好的祝福, 汤姆。

答案 5 :(得分:0)

您可以使用指针并将其作为数组引用。

char * a;
char b[5] = {0,1,2,3,4};
char c[5] = {5,6,7,8,9};

//run some code here
//then

a = b;  // "Populate" the "array"

// Then reference a using array notation
printf ("%d\n", a[3]);  // Print the number 3

// run some more code

a = c;  // "Populate the "array" with some new values
printf ("%d\n", a[3]);  // Print the number 8

答案 6 :(得分:0)

使用C99复合文字(由GCC支持,但不支持MSVC),

char a[5];

//run some code here
//then

memcpy(a, (char[]){0,1,2,3,4}, sizeof(a));

答案 7 :(得分:-2)

sprintf(a,“%d%d%d%d%d”,0,1,2,3,4);

改变了我的回答。