Tag: 指针

链接列表头地址更改C.

我创建了我的结构的链接列表,但由于某种原因,每次我添加另一个链接它改变头地址,但我希望y头地址是第一个条目。 这是我的代码: struct checkPoints *tgh = NULL; struct checkPoints **linkedlist = &tgh; struct checkPoints *cp = malloc(sizeof (struct checkPoints)); chPo = fopen(fileName, mode); if (chPo == NULL) { printf(“Can’t find the files.”); exit(1); } else { for (i = 0; i dropOut, &cp->currentPoint, &cp->competitor, &cp->hour, &cp->minute); cp->next = NULL; if (*linkedlist == NULL) { printf(“ONCE”); […]

无法分配指针linux接收的内存

我有一个函数,通过指针接收将存储的位置。 这个地方可以有不同的其他类似结构。该函数必须读取一个文件。 这个文件存储了一个我需要阅读的结构。 typedef struct user_manage_t{ short int user_id; char permission; long int other_id; long int check; }user_manage_t; typedef struct holder_t{ user_manage_t *user_manage; user_manage_t *user_manage_backup; //(…)and a lot of stuff }holder_t; holder_t holder; int db_read_from_file(user_manage_t *prt){ DEBUG_PRINT(“READ_FROM file started”); FILE *fd_read; char buffer[480]; int read, bytesRead=0; int num; const struct user_manage_t *header; fd_read = fopen(“/home/user/user_list”,”r+b”); […]

在C中返回一个字符串数组

我正在进行一项任务,我需要让一个方法返回一个指向字符串数组的指针,从文件中读取。 该函数有效,但是当我尝试将返回的指针分配给main函数中的变量时,我最终得到一个空值数组。 这是我的代码: #include char **buildAnsArray(){ FILE *in; int num, i; in = fopen(“data.txt”, “r”); fscanf(in, “%d”, &num); char ansArray[10][num]; for(i = 0; i < num; i++){ fscanf(in, "%s", ansArray[i]); } return ansArray; }; main(){ char **ansArray = buildAnsArray(); } 我正在使用的输入文件(data.txt)以: 3 B 20 1101 ansArray(在buildAnsArray中)正确包含{‘B’,’20’,’1101’},但ansArray(在main中)为空。 我知道我可以将所有内容移动到main,而不用担心将指针返回到字符串数组,但是赋值需要buildAnsArray函数。 我该怎么做才能解决这个问题?

从表中删除元素(c程序)

我有一个方法rtable_remove,如下所示 int rtable_remove(RESIZABLE_TABLE * table, char * name) { int i = 0; int j = 0; int position = 0; for(i = 0; i currentElements;i++) { if(strcmp(table->array[i].name, name) == 0) { position = i; free(&(table->array[i].name)); free(&(table->array[i].value)); for(j = position; j currentElements;j++) { table->array[j].name = table->array[j+1].name; table->array[j].value = table->array[j+1].value; } table->currentElements–; } } return 0; […]

C realloc不改变字符数组的表观大小

当我运行下面的代码时,我得到了给定的输出。 #include /* printf */ #include /* malloc, realloc */ int main() { char* characters = (char *) malloc(10 * sizeof(char)); printf(“Before: characters at %p, size=%lu\n”, (void *) characters, sizeof(characters) / sizeof(characters[0])); char* temp = (char *) realloc(characters, 100); if (temp) { printf(“After realloc, characters size = %lu, temp size = %lu\n”, sizeof(characters) / sizeof(characters[0]), […]

结构初始化不适用于malloc

我在C中有一个小背景,我正在努力挖掘,我遇到了一些我无法解释的事情。 假设我有以下结构: struct World { Things* things; }; 以及以下function: void initWorld(World *world); void addThingToWorld(World *world, Thing *thing); 现在,根据initWorld的实现以及我如何使用它,它将工作与否。 但我不明白为什么第二次实施失败。 两种实现如下: 第一(工作)实施 void initWorld(World *world){ world->things = NULL; } // usage World world; initWorld(&world); // will work, because world has been correctly initialized. addThingToWorld(&world, &something); 第二个(失败)实施 void initWorld(World *world){ world = (World*) malloc(sizeof(World)); world->things = NULL; […]

如何访问在一个函数中创建的数据结构,在另一个函数中,而不返回或传入它?

如果可以,我只是通过在main函数中初始化结构的副本并将其传递给另一个函数来解决这个问题,但我不允许更改此项目的函数头。 既然我已经得到了这个,我也确定有一个同样好的解决方案,它将帮助我学习如何使用动态内存分配来使函数的动作独立于该函数的范围。 我的结构: typedef struct AmNet { // this struct can be changed as needed int size; User ** users; // group of users in the net User *front; // the first user User *back; // the last user } *AmNet; 要创建的function是: void create_net(){ // this line cannot be changed } 在另一个文件的main函数中,简单地用: create_net(); 然后,例如 – […]

C:指向Struct中函数的指针

我正在练习在C中构建一个struct数据结构,struct有一个指向函数的字段指针。 我写了下面的代码,但是当我尝试用gcc编译时,我收到以下错误: 在函数’main’中:custhreadsT​​est1.c:27:16:警告:从不兼容的指针类型分配[默认启用] 什么是在我的结构中为函数指针分配指针字段的正确方法? 非常感谢! #include #include #include typedef struct { ucontext_t (*gt_context); void (*function)(void *); int status_flag; } custhread_t; void *add(void *) { // do something here } int main(void) { ucontext_t ctx_main; getcontext(&ctx_main); custhread_t th1; th1.gt_context = &ctx_main; th1.function = &add; th1.status_flag = 1; return 0; }

如何在C中将char指针数组复制到另一个

我试图将char指针数组存储到另一个char指针数组。 我正在获得相同的分段错误。 int main(int argc, const char* argv[]) { int argcCpy = argc; char* argvCpy[10] = {}; for(argcCpy = argc; argcCpy>0; argcCpy–) { argvCpy[argcCpy] = (char *) malloc(strlen(argv[argcCpy])); memcpy(argvCpy[argcCpy], argv[argcCpy], strlen(argv[argcCpy])); printf(“\nCount: %d, string: %s”, argcCpy, argvCpy[argcCpy]); } return 0; } 我花了足够的时间来完成这项工作,但我无法做到。 此外,已经提出了同样的问题,这个问题也没有得到答复。 如果有人可以让我知道相同的工作代码,那将非常有帮助。 希望这个回答。 类似问题的链接没有被发现 – C初学者 – 将char *数组复制到另一个char *数组 谢谢。

动态多维数组

我需要一个多维的字符数组,它只在一个维度上是动态的… 我必须存储一对长度为10(或更少)字符的字符串,但具有可变数量的“对”。 我的想法是这样的 char (*instrucao)[2][10]; 这给了我一个指向2×10字符数组的指针,但当我做这样的事情时这不能正常工作: char strInstrucoes[117], *conjunto = calloc(21, sizeof(char)); instrucao = calloc(1, sizeof(char[2][10])); conjunto = strtok(strInstrucoes,”() “); for(i = 0; conjunto != NULL; i++){ realloc(instrucao, i+1*sizeof(char[2][10])); sscanf(conjunto,”%[^,],%s”, instrucao[i][0], instrucao[i][1]); printf(“%s | %s\n”, instrucao[i][0], instrucao[i][1]); conjunto = strtok(NULL, “() “); } 将strInstrucoes作为(abc,123) (def,456) (ghi,789) ,我没有矩阵,每行3对2对,如下所示: abc | 123 def | 456 ghi | […]