Так что у меня этот кусок кодазЬгстр ошибка сегментации с массивом структур
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hw09-header.h"
struct student
{
char* name;
char* course;
};
int main(int argc, char* argv[])
{
int i = 0, init_size=10,x,z;
char *value = "go";
int key, count=0;
char* del = ","; /*Uses comma sign as delimiter*/
char *token=NULL;
char *temp_stor;
struct student *array;
struct student *temp;
if(argc != 2)
{
printf(" usage: program_name positive_integern");
printf("example: ./example-hw09 123n");
exit(1);
}
/************** begin REQUIRED **************/
/* put before logic. DO NOT PUT IN A LOOP */
key = atoi(argv[1]);
initialize(key);
/************** end REQUIRED **************/
/* example loop */
array=malloc((init_size)*sizeof(int));
while(strcmp(value, "stop") != 0)
{
value = getString();
token = strtok(value, del);
while (token !=NULL)
{
if(i%4==0)
{
init_size=init_size*2;
temp = realloc(array,init_size*sizeof(int)) ;
if(temp != NULL)
{
array = temp;
}
else
{
printf("unable to reallocaten");
exit(1);
}
}
array[i].name=malloc(sizeof(struct student)*10);
strcpy(array[i].name,token);
printf("%s %dn",array[i].name,i);
token = strtok(NULL, del);
array[i].course=malloc(sizeof(struct student)*11);
strcpy(array[i].course,token);
printf("%s n",array[i].course);
i=i+1;
token = strtok(NULL, del);
x=i;
for(x=0; x<i; x++)
{
if(strcmp(array[x].name,token)==0)
printf("Duplicate found n");
}
}
}
}
Теперь, когда я пытаюсь сделать STRCMP, он всегда дает мне ошибку сегментации, и я не знаю, почему.
Я не должен использовать связанные списки здесь, и я думаю, что у меня все сделано прямо здесь, для следующих нескольких частей мне просто нужно сравнивать и сортировать вещи, и я продолжаю получать эту ошибку сегментации.
И у моего массива есть элементы в нем, я могу распечатать их все, просто не сравнивая их по какой-то причине.
Вы уверены, что имя студента имеет длину всего 9 символов? – Alex
. Повторно вставьте код с удаленными вкладками (настройте редактор, чтобы использовать только пробелы и повторный отступ). Также скомпилируйте свой код с включенными предупреждениями (для gcc '-Wall -Wextra') и посмотрите, есть ли у вас какие-либо подсказки от компилятора. – hyde
Да, это часть части задания, что имя не будет длиннее 9 букв. –