很抱歉问了这么长的问题,但我要在这里发疯了。
我正在尝试用 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/