خطأ: المهمة تجعل المؤشر من عدد صحيح بدون طاقم ... في C Prog

StackOverflow https://stackoverflow.com/questions/4330682

  •  30-09-2019
  •  | 
  •  

سؤال

أحصل على هذا الخطأ كلما قمت بتشغيل البرنامج "المهمة تجعل المؤشر من عدد صحيح بدون طاقم". الكود الخاص بي مكتوب أدناه .... الرجاء المساعدة ... شكرا

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);
     }
هل كانت مفيدة؟

المحلول

لم تقم بذلك (على الأقل ، ليس في الكود المحفوظ) #includeد الرأس الذي يحدد strtok وظيفة. في C ، من المفترض أن تعود الوظائف التي لم يتم النماذج int. وبالتالي ، نحن نخصص من int (نتيجة الوظيفة) إلى أ char* (نوع من token) بدون طاقم.

نحن لا نريد طبعا ، بالطبع. نريد ان #include الرأس ، بحيث يفهم المترجم ماذا strtok عائدات.

لكننا أيضًا لا نريد استخدامه حقًا strtok إذا كان هناك أي شيء آخر من شأنه القيام بهذه المهمة. لديها قيود عديدة غير واضحة. لتحليل سلسلة قوية ، حاول sscanf.

نصائح أخرى

أعتقد أنكchar *number[3]; يجب ان يكون char number[3];, ، أو على الأقل يجب عليك تخصيص مساحة لكل من number مؤشرات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top