Ошибка: присваивание делает указатель из Integer без приведения ... в C Prog - PullRequest
0 голосов
/ 02 декабря 2010

Я получаю эту ошибку всякий раз, когда я запускаю программу «Присвоение делает указатель из Integer без приведения».Мой код написан ниже .... Пожалуйста, помогите ... Спасибо

struct student {
       char studentID[6];
       char name[31];
       char course [6];
};
struct student *array[MAX];
struct student dummy;
int recordCtr=0;

int read(){
     FILE *stream = NULL;
     int ctr;
     char linebuffer[45];
     char delims[]=", ";
     char *number[3];
     char *token = NULL;

     stream = fopen("student.txt", "rt");

     if (stream == NULL) stream = fopen("student.txt", "wt");
     else {
          printf("\nReading the student list directory. Wait a moment please...");
          while(!feof(stream)){
                array[recordCtr]=(struct student*)malloc(sizeof(struct student)); 
                while(!feof(stream)) {
                     fgets(linebuffer, 46, stream);
                     token = strtok(linebuffer, delims); //This is where the error appears
                     ctr=0;
                     while(token != NULL){
                          strcpy(number[ctr], linebuffer);
                          token = strtok(NULL, delims);  //This is where the error appears
                          ctr++;
                     }
                     strcpy(array[recordCtr] -> studentID,number[0]);
                     strcpy(array[recordCtr] -> name,number[1]);  
                     strcpy(array[recordCtr] -> course,number[2]);                    

                }                     
          recordCtr++;
          }
     recordCtr--;
     fclose(stream);
     }

Ответы [ 2 ]

7 голосов
/ 02 декабря 2010

У вас нет (по крайней мере, не в вставленном коде) #include d заголовка, который определяет функцию strtok.В C предполагается, что функции, которые еще не были прототипированы, возвращают int.Таким образом, мы присваиваем int (результат функции) char* (тип token) без приведения.

Разумеется, мы не хотим приведение.Мы хотим #include заголовок, чтобы компилятор понимал, что возвращает strtok.

Но мы также не хотим использовать strtok, если есть что-то еще, что выполнит эту работу.У этого есть многочисленные ограничения, которые не очевидны.Для надежного анализа строки попробуйте sscanf.

1 голос
/ 02 декабря 2010

Я думаю, что ваш char *number[3]; должен быть char number[3];, или, по крайней мере, вы должны выделить место для каждого из 3 number указателей.

...