Tag: struct

如何在C中修改共享内存(shmget / shmat)?

我有一个结构: 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分配不兼容的类型,指针问题?

嗨,我正在使用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中的指针冒泡排序结构

我想使用冒泡排序算法和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 ) { […]

结构中的枚举 – C与C ++

我正在尝试在结构中使用枚举,这可以编译并与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 […]

在套接字上发送一个结构,在C中使用正确的填充和字节序

我有几个结构定义为通过不同的操作系统(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(馅饼,地壳)

C中的隐秘结构定义

我遇到了以下迷宫定义代码: 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字节,因此是错误原因。 我想知道我是否需要担心这个警告? 单个堆栈变量的大小是否真的有最大限制? 谢谢,谢

在C中,如何将结构的成员声明为volatile?

如何将结构的特定成员声明为volatile?

如何在C中实现struct的二维数组

我目前正在尝试理解如何在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 ……

结构标记和名称,为什么声明为name的局部变量编译?

在最近看到的一些代码中,有一个像这样定义的结构: typedef struct tagMyStruct { int numberOne; int numberTwo; } MYSTRUCT; 我理解这一点的方式, tagMyStruct是新的数据类型, MYSTRUCT是一个在那里创建的变量。 在另一个地方,这是这样使用的: MYSTRUCT *pStruct = new MYSTRUCT; 它使用Visual Studio 2010编译得很好。那个有效的C ++怎么样? 我以为MYSTRUCT是一个变量而不是一个类型?