c - 在 C 中处理结构数组

标签 c arrays pointers struct

很抱歉问了这么长的问题,但我要在这里发疯了。

我正在尝试用 C 语言编写一个社交网络的小模拟。

我正在尝试创建一个结构数组,每个结构都是一个用户。

6 天以来,我一直在尝试编写程序添加用户并随后访问日志的部分,但我做不到。所以我快要在这里失去理智了。

struct myStruct { /* This is a global variable */
     char *studentName;
    int *bornYear;
    char *school;
};

然后在主函数中,我创建了一个指针,例如;

struct myStruct** students = malloc (sizeof(struct myStruct ));
int counter = 0; /* the counter of students */

通过 if-else if 和 switch-case 链,我对命令进行了分类。当要求添加新用户时,重新分配我创建的数组:

students = realloc(students, (counter+1) * sizeof (struct students));
students[counter] = adding (*command, counter);
counter++;

函数在这里:

struct myStruct adding (char theCommand[], int i){
    struct myStruct *q = malloc(sizeof(struct myStruct *)); // I get a warning for this allocation
    char *irrelevantChar = strtok(theCommand[], ";");
    q->studentName  = strtok(NULL, ",");
    q->bornYear= strtok(NULL, ",");
    q->school= strtok(NULL, ",");
    return q;

我确信 strtok 函数工作正常。

当我尝试访问这些结构时,程序会在运行时出现错误(在 Windows 上停止工作,在 ubuntu 上出现段错误)或者我看到随机的不相关数据等。我已经使用了 6 天,所以我看到了很多错误。但是我找不到创建和访问这些结构的正确方法。

在另一种指挥情况下;

"command character" John Smith,George Lucas // names are just for example :)

我只是针对这种情况写了如下代码:

printf ("\n\n%s", myStruct[0]->school;

这只是一个随机命令,只是为了表明我无法访问它。

输出必须是“牛津大学”之类的。相反,我得到了以下输出:

ge Lucas

所以一些随机数据。我也不知道这里有什么问题。

我必须建立友谊等,所以我必须能够访问我创建的每个结构。

谢谢:)

最佳答案

在您的代码中,以下行为指向myStruct指针 分配了足够的内存,而不是为结构实际分配内存。

struct myStruct *q = malloc(sizeof(struct myStruct *)); 

然后您开始取消引用该指针,因此此时您正在访问未分配的内存:

q->studentName  = strtok(NULL, ",");
q->bornYear= strtok(NULL, ",");
q->school= strtok(NULL, ",");

我不能说您的代码中没有其他错误,但您需要先分配足够的内存。即 sizeof(struct myStruct) 希望对您有所帮助。

关于c - 在 C 中处理结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829656/

相关文章:

c - 在 C 中返回 malloced 指针

c - '.'不被识别为内部或外部命令

c - Arduino 无法读取按钮

javascript - JS从多维数组中获取包含值的数组索引

java - 初始化二维字符数组以测试打印时出错

c++ - 指针问题

c - 指针和结构

c - ntddk.h 没有那个文件或目录

java - public static int getCoins(int[][] map, int row, int col) 方法

c - 无法使用指向整个数组的指针取消引用行