Tag: 数组

C中的“中止陷阱:6”错误?

我是C的初学者,但我在终端上通过gcc在xcode上运行此代码: #include #include int main(){ char name[12] = “Roman Mirov”; printf(“My name is %s\n”, name); name[8] = ‘k’; printf(“My name is %s\n”, name); char greeting[] = “hello”; printf(“%s %s\n”, greeting, name); strcpy(greeting, “greetings, “); printf(“%s%s\n”, greeting, name); return 0; } 它输出这个: My name is Roman Mirov My name is Roman Mikov hello Roman Mikov Abort […]

合法的数组赋值。 可能吗?

在阅读了关于K&R书中结构的章节之后,我决定做一些测试来更好地理解它们,所以我写了这段代码: #include #include struct test func(char *c); struct test { int i ; int j ; char x[20]; }; main(void) { char c[20]; struct {int i ; int j ; char x[20];} a = {5 , 7 , “someString”} , b; c = func(“Another string”).x; printf(“%s\n” , c); } struct test func(char *c) { struct […]

C中的此代码是否属于未定义行为类别?

a是一个数组, foo是一个函数, i是一个int 。 a[++i] = foo(a[i-1], a[i]); 上面的代码会有未定义的行为吗? 数组索引++i , i-1和i保证在数组范围内。

这是合法的C / C ++吗? `int * p =(int ){1,2,3};`

我的这个答案产生了一些评论声称以下构造不是合法的C / C ++: void f (int* a) ; f ((int[]){1,2,3,4,0}) ; (请参阅此完整程序的ideone链接 )。 但我们无法解决问题。 任何人都可以对此有所了解吗? 各种标准有什么用?

C 远程分配

我今天遇到了一些代码,这些代码使用的语法在我多年的C编程中是我从未见过的。 MWE: #include char *example_array[] = { [0 … 5] = “hello world”, [6 … 10] = “goodbye world” }; int main(void) { printf(“%s, %s.\n”, example_array[3], example_array[7]); return 0; } 预期产量: hello world, goodbye world. 很清楚静态上下文中发生了什么,但我很好奇这是否可以用作非静态快捷方式中的方便快捷方式,例如循环中的赋值。 当然,它不会给-funroll-loops不能提供任何性能提升,但它可能会使代码更清晰,比如矩阵行分配或其他方式。 使用这种语法时, clang和gcc默认不提供任何警告,但我从未在任何地方看到过它。 这是某种扩展,还是标准的C语法?

在C / C ++中初始化数组是一种好习惯吗?

我最近遇到一个案例,我需要比较两个文件(黄金和预期)来validation测试结果,即使写入两个文件的数据相同,文件也不匹配。 在进一步调查中,我发现有一个结构包含一些整数和一个64字节的char数组,并且并非所有char数组的字节都在大多数情况下被使用,而数组中未使用的字段包含随机数据造成了不匹配。 这让我提出了一个问题,即在C / C ++中初始化数组是否也是一个好习惯,因为它是用Java完成的?

alloca完全可以替换吗?

我已经阅读了很多地方, alloca已经过时,不应该使用,而应该使用可变长度数组。 我的问题是: alloca是否可以被可变长度数组完全替换? 在我的特定实例中,我有一些看起来像这样的东西: typedef struct { int *value; size_t size; } some_type; void SomeExternalFunction(some_type); … void foo(){ //What I thought to do some_type bar; bar.value=alloca(sizeof(int)*10); SomeExternalFunction(bar); //what should be done without alloca some_type fizz; int tmp[10]; fizz.value=tmp; SoemExternalFunction(fizz); } 我错过了什么或者这是对alloca的实际好用吗? 另外假设这个例子由于某种原因我想要在堆栈上分配值

Cuda从设备存储器创建3d纹理和cudaArray(3d)

我试图从设备arrays的一部分创建纹理3d。 要做到这一点,这些是我的步骤: malloc设备arrays 写设备arrays 创建CudaArray(3D) 将纹理绑定到CudaArray 我这样做的方式不会产生编译器错误,但是当我运行cuda-memcheck时,当我试图从纹理中获取数据时,它失败了。 无效的全局读取大小为8 ..地址0x10dfaf3a0超出范围 这就是为什么我猜我宣布纹理数组错了。 这是我如何访问纹理: tex3D(NoiseTextures [I]中,X,Y,Z) 我正在做上述步骤的方式: 1.Malloc设备arrays cudaMalloc((void **)&d_Noise, sqrSizeNoise*nNoise*sizeof(float)); 2.编写设备arrays curandCreateGenerator(&gen,CURAND_RNG_PSEUDO_DEFAULT); curandSetPseudoRandomGeneratorSeed(gen,Seed); curandGenerateUniform(gen, d_Noise, sqrSizeNoise*nNoise); curandDestroyGenerator(gen); 3 + 4.创建Cudaarrays并将其绑定到纹理(我猜错了就在这里) cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc();//cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat); cudaArray *d_cuArr; cudaMalloc3DArray(&d_cuArr, &channelDesc, make_cudaExtent(SizeNoise,SizeNoise,SizeNoise), 0); cudaMemcpy3DParms copyParams = {0}; //Loop for every separated Noise Texture (nNoise = 4) […]

C中二维数组的结构 – 如何声明和使用

我一直试图用一个非常简单的想法在C中工作,但我甚至无法理解语法。 该程序将从命令行获取一些输入,并使用它们来决定制作二维结构数组的大小。 然后,在for循环类型的情况下,我希望能够根据用户输入更改特定的unsigned char。 所以首先我构建一个2D结构数组,每个结构包含一个无符号字符数组以及一个名称,然后我就可以写入这些结构。 命令行参数是三个字符串。 First one is number of rows, second one is number of columns, third one is size of unsigned char array within each struct. #include #include #include #include #include typedef struct { unsigned char* Data; char* name; } myStruct; myStruct* myArr[][]; int main(int argc, char *argv[]) { int y = […]

什么原因导致编译器警告未使用的函数?

简单设置:有n个函数的原型和函数的实现。 有一大堆函数指针。 每个函数都列在此数组中。 在使用gcc进行编译时,有些仍会导致-Wunused-function。 码: void foo1(void); void foo2(void); void bar1(void); void bar2(void); /* and their implementations */ void (*functions[])(void) = { foo1, foo2, bar1, bar2 }; 这就是设置的样子(仅举例)! 其中一个foo / bar函数现在在使用gcc编译时会导致-Wunused-function警告。 其他人没有。 为什么?