Tag: 初始化

我可以先声明一个数组并在以后给出它的值吗?

我试过这样做但是出错了。 为什么我不能这样做? int main() { char sweet[5]; sweet = “kova”; printf(“My favorite sweet is %s\n”, sweet); return 0; }

初始化gchar时程序givin错误

在我的main.h (包含在所有其他src文件中)中,我有: char* buffer; 这编译并且工作正常。 由于其他原因,我尝试初始化buffer ,两者都是 char* buffer=””; 和 char* buffer=”\0″; 现在,构建它是错误的: src/search.o:(.data+0x0): multiple definition of `buffer’ src/bib.o:(.data+0x0): first defined here src/mkbib.o:(.data+0x0): multiple definition of `buffer’ src/bib.o:(.data+0x0): first defined here src/update_file.o:(.data+0x0): multiple definition of `buffer’ src/bib.o:(.data+0x0): first defined here src/view.o:(.data+0x0): multiple definition of `buffer’ src/bib.o:(.data+0x0): first defined here src/file_util.o:(.data+0x0): multiple definition of `buffer’ src/bib.o:(.data+0x0): […]

使用rand的函数初始化矩阵总是以相同的方式

我有一个函数,应该以一个随机的方式初始化矩阵的值,给定一个概率(在这种情况下p(0)= 1/3,p(1)= 2/3)问题是矩阵总是出来是一样的: void init_matrix(short unsigned* m,int* n_gen) { *n_gen=0; int i; for(i=0;i<N_X*N_Y;i++) { if( ( ( rand() % 100 ) % 3) == 0 ) m[i]=0; else m[i]=1; } } 是因为rand()函数的实现? 还是我错误地使用它? 谢谢!

使用带有未命名嵌套数据类型的指定初始值设定项

我想知道是否有可能在未命名的结构数据成员中使用指定的初始化器…(Yikes,一口,但是,是的,这是我做的事情最干净的方式……)。 如果我有: typedef struct MainStruct { union { uint8_t a8[16]; uint64_t a64[2]; }; uint64_t i64; } MainStruct_t; typedef struct OtherStruct { MainStruct_t main; int otherval; } OtherStruct_t; OtherStruct_t instance = { .main.a64 = { 0, 0 }, .otherval = 3 }; 我尝试编译,我得到错误: tst3.c:16: error: unknown field ‘a64’ specified in initializer 我也尝试过使用.main..a64 ,但我遇到了其他问题。 这是使用gcc 4.4。 不幸的是, […]

C – 由变量定义的长度的静态数组

我实际上正在使用C语言进行分配,为了实现我的需要,我需要使用一个静态数组,让我们说 static int array[LEN]; 诀窍是这个数组长度LEN是在main()计算的。 例如 static int LEN; void initLen(int len) { LEN = len; } static int array[LEN]; 在initLen中调用initLen ,并使用用户给出的参数计算len 。 这个设计的问题是我得到了错误 threadpool.c:84: error: variably modified ‘isdone’ at file scope 该错误是由于我们无法使用变量作为长度初始化静态数组。 为了使它工作,我正在定义一个LEN_MAX并写 #define LEN_MAX 2400 static int array[LEN_MAX] 这个设计的问题是我暴露自己的缓冲区溢出和segfaults 🙁 所以我想知道是否有一些优雅的方法来初始化一个具有确切长度LEN的静态数组? 先感谢您!

C中自动和全局变量的初始化

如果我理解C中的全局变量(进入数据段)被初始化,其中自动变量(进入堆栈)不是。 或者反过来呢? 为什么会这样? 编译器没有初始化这两种变量的优点是什么? 它会提高速度吗?

ISO C禁止在C中使用空的初始化程序括号

我有这样的结构: typedef struct { int a; int b; int c; int d; } Hello; 然后我以这种方式宣布它: Hello hello[6] = {}; 然后我得到了这个警告:ISO C禁止空初始化器括号,无论如何我认为我需要初始化它,如何以正确的方式做到这一点?

C中未初始化指针的危险究竟是什么?

我正在努力处理C,因为我通过Jim Trevor的“ 旋风:C语言的安全方言 ”为PL课程工作。 特雷弗和他的合着者正试图制作一个安全的C版本,因此他们用他们的语言消除了未初始化的指针。 在未初始化的指针上搜索一下 ,似乎未初始化的指针指向内存中的随机位置。 似乎这一点使它们不安全。 如果引用非itilialized指针,则跳转到内存的不安全部分。 期。 但特雷弗谈论它们的方式似乎暗示它更复杂。 他引用了下面的代码,并解释说当函数FrmGetObjectIndex取消引用f时,它不是访问有效指针,而是访问一个不可预测的地址 – 当分配f的空间时堆栈上的任何内容。 什么是Trevor的意思是“当f的空间分配时,堆栈中的任何东西”? 默认情况下,“未初始化”指针是否已初始化为内存中的随机位置? 或者他们的“随机”行为是否与为这些指针分配的内存有关,因为堆栈上的意外行为会填充奇怪的值(然后被引用)。 Form *f; switch (event->eType) { case frmOpenEvent: f = FrmGetActiveForm(); … case ctlSelectEvent: i = FrmGetObjectIndex(f, field); … }

C / C ++数组赋值

示例代码: int ar[3]; ………… ar[0] = 123; ar[1] = 456; ar[2] = 789; 有没有办法让它缩短? 就像是: int ar[3]; ………… ar[] = { 123, 456, 789 }; 我不需要解决方案: int ar[] = { 123, 456, 789 }; 定义和初始化必须是分开的。

重新分配成一个函数

我的问题是’realloc’。 以下代码正常工作(没有警告): #include #include int main () { int num=10; int *vet; int i; for (i=0; i<num; i++) { /* allocate memory of vet to contains (i+1) int */ vet = (int*) realloc ( vet, (i+1) * sizeof(int) ); /* write numbers in the allocated memory */ vet[i] = 321 + i; } /* print […]