我有一个结构: struct sdata { int x; int y; time_t time; }; 我为结构创建共享内存,如下所示: size_t shmsize = sizeof(struct sdata); shmid = shmget(IPC_PRIVATE, shmsize, IPC_CREAT | 0666); 然后我像这样访问共享内存: struct sdata *data = shmat(shared.shmid, (void *) 0, 0); data->time = time(NULL); // function returns the current time 我的问题非常简单。 这是访问/修改共享内存的正确方法吗? 这是最好的方法吗? (我使用System V信号量进行同步,但我没有包含该代码。我只是想确保正确访问/修改共享内存。)
嗨,我正在使用C,我有一个关于分配指针的问题。 struct foo { int _bar; char * _car[SOME_NUMBER]; // this is meant to be an array of char * so that it can hold pointers to names of cars } int foofunc (void * arg) { int bar; char * car[SOME_NUMBER]; struct foo * thing = (struct foo *) arg; bar = thing->_bar; // […]
我想使用冒泡排序算法和C中的指针对结构数组进行排序。我有一个汽车结构: typedef struct{ char model[30]; int hp; int price; }cars; 我为12个项目分配内存: cars *pointer = (cars*)malloc(12*sizeof(cars)); 并从文件中读取数据: for (i = 0; i model, &(pointer+i)->hp, &(pointer+i)->price); } 我将指针ptr传递给bubbleSort函数: bubbleSort(pointer, number); 这是我的bubbleSort函数: void bubbleSort(cars *x, int size) { int i, j; for (i=0;i<size-1;i++) { int swapped = 0; for (j = 0; j hp > (x+j+1)->hp ) { […]
我正在尝试在结构中使用枚举,这可以编译并与gcc 。 但是使用g++编译时相同的代码会引发错误。 #include #include struct foo { enum {MODE1, MODE2, MODE3} mode; enum {TYPE1, TYPE2} type; }; void bar(struct foo* bar) { bar->mode = MODE1; } int main() { struct foo* foo = (struct foo*) malloc(sizeof(struct foo)); bar(foo); printf(“mode=%d\n”,foo->mode); } 用gcc获得的输出: $ gcc foo.c $ ./a.out mode=0 用g++获得的输出: $ g++ foo.c foo.c: In function […]
我有几个结构定义为通过不同的操作系统(tcp网络)发送。 定义的结构是: struct Struct1 { uint32_t num; char str[10]; char str2[10];} struct Struct2 { uint16_t num; char str[10];} typedef Struct1 a; typedef Struct2 b; 数据存储在文本文件中。 数据格式如下: 123 馅饼 脆皮 Struct1a存储为3个单独的参数。 但是,struct2是两个独立的参数,第二行和第三行都存储在char str []中。 问题是当我通过多个网络写入服务器时,数据未正确接收。 有许多空间可以分隔结构中的不同参数。 当我写入服务器时,如何确保正确的发送和填充? 如何正确存储数据(动态缓冲区或固定缓冲区)? write的例子:write(fd,&a,sizeof(typedef struct a)); 它是否正确? 问题接收struct2的侧输出: 123(,) 0(,馅饼) 0(地壳) 正确的输出 123(馅饼,地壳)
我遇到了以下迷宫定义代码: typedef struct mazeNode { int hasCheese; int tag; struct mazeNode *left; struct mazeNode *right; } maze_t; maze_t maze = { .tag = 1, .left = &(maze_t) { .left = &(maze_t) { .left = &(maze_t) {}, .right = &(maze_t) {} }, .right = &(maze_t) { .right = &(maze_t) {} } }, .right = &(maze_t) { […]
我在C中声明了一个大小超过1024字节的结构变量。 在运行Coverity(静态代码分析器应用程序)时,它报告此堆栈变量大于1024字节,因此是错误原因。 我想知道我是否需要担心这个警告? 单个堆栈变量的大小是否真的有最大限制? 谢谢,谢
如何将结构的特定成员声明为volatile?
我目前正在尝试理解如何在C中实现结构的二维数组。我的代码一直在崩溃,我真的要让它像我所有的方法一样坚定到C:垃圾。 这就是我得到的: typedef struct { int i; } test; test* t[20][20]; *t = (test*) malloc(sizeof(test) * 20 * 20); 我的光荣错误: 错误:从类型’struct test *’分配类型’struct test * [20]’时出现不兼容的类型 我是否必须为每个第二维单独分配内存? 我疯了。 应该这么简单。 有一天,我将构建一个时间机器并磁化一些c-compiler-floppies ……
在最近看到的一些代码中,有一个像这样定义的结构: typedef struct tagMyStruct { int numberOne; int numberTwo; } MYSTRUCT; 我理解这一点的方式, tagMyStruct是新的数据类型, MYSTRUCT是一个在那里创建的变量。 在另一个地方,这是这样使用的: MYSTRUCT *pStruct = new MYSTRUCT; 它使用Visual Studio 2010编译得很好。那个有效的C ++怎么样? 我以为MYSTRUCT是一个变量而不是一个类型?