我想这样做:
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"
)一次填充数组,而不是单独定义每个元素?
谢谢,
拉伊德
答案 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);
改变了我的回答。