2010-12-02 28 views
0

Je reçois cette erreur chaque fois que je lance le programme "Affectation fait un pointeur de Integer sans un cast". Mon code est écrit ci-dessous .... S'il vous plaît aider ... ThankxErreur: Affectation fait un pointeur de Integer sans un cast ... en C Prog

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); 
    } 
+0

Il semble que vous obteniez l'erreur lors de la COMPILATION, pas lorsque vous l'exécutez. Aussi, pouvez-vous nous dire sur quelle ligne vous l'obtenez ?? – EboMike

+0

Oui ... l'erreur apparaît quand je le compile ... la ligne token = strtok (linebuffer, delims); – newbie

+1

Où initialisez-vous ce tableau 'char * number [3];'? –

Répondre

7

Vous avez pas (du moins, pas dans le code collé) #include d l'en-tête qui définit la fonction strtok. En C, les fonctions qui n'ont pas encore été prototypées sont supposées renvoyer int. Ainsi, nous attribuons un int (résultat de la fonction) à un char* (le type de token) sans aucune conversion.

Nous ne voulons pas de moulage, bien sûr. Nous voulons #include l'en-tête, de sorte que le compilateur comprenne ce que strtok renvoie.

Mais nous ne voulons pas vraiment utiliser strtok s'il y a autre chose qui fera l'affaire. Il a de nombreuses limitations qui ne sont pas évidentes. Pour une analyse de chaîne robuste, essayez sscanf.

+0

merci ... mais il y a encore une erreur ... je vais essayer le sscanf ... – newbie

+0

Pourquoi le compilateur ne lance pas "référence indéfinie à strtok" si l'en-tête n'a pas été inclus? – Coconop

1

Je pense que votre char *number[3]; devrait être char number[3];, ou au moins vous devriez allouer de l'espace pour chacun des 3 pointeurs number.

+0

Non; l'OP veut un tableau de trois chaînes ici, AFAICT. Le problème est que 'char *' n'est pas une chaîne; il n'y a pas d'espace alloué pour les données copiées avec l'appel 'strcpy'. Mais maintenant, le code ne compile même pas, alors ... –

+0

@Karl, c'est exactement ce que je voulais dire dans ma partie "au moins" de la réponse. – ysap

+0

Désolé, raté cette partie. :) –