2010-12-02 3 views
0

私はプログラムを実行するたびに "割り当ては整数なしからキャストをキャスト"を実行するときにこのエラーが発生します。私のコードを以下に書かれている....あなたは#include D(少なくとも、ではない貼り付けコードで)strtok機能を定義するヘッダを持っていないエラー:割り当ては、キャストなしで整数からのポインタを作る... 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

あなたがそれをコンパイルしたときにエラーが発生したように聞こえます。また、どのラインを手に入れているのか教えていただけますか? – EboMike

+0

はい...コンパイルするとエラーが表示されます... line token = strtok(linebuffer、delims); – newbie

+1

この配列 'char * number [3];'はどこで初期化しますか? –

答えて

7

... Thankxを助けてください。 Cでは、まだプロトタイプ化されていない関数はintを返すと仮定されています。したがって、int(機能結果)からchar*(タイプはtoken)にキャストなしで割り当てています。

キャストは勿論ありません。私たちは#includeヘッダにしたいので、コンパイラは何を返すのか理解しています。strtokが返します。

しかし、実際に仕事をする他のものがある場合はstrtokを使用することも嫌いです。それには明らかでない多くの制限があります。堅牢な文字列解析の場合は、sscanfを試してください。

+0

ありがとう...しかし、まだエラーがあります...私はsscanfを試してみます... – newbie

+0

ヘッダーが含まれていない場合、コンパイラが "未定義の参照strtok"をスローしないのはなぜですか? – Coconop

1

char *number[3];char number[3];である必要があります。または、少なくとも3つのnumberポインタのそれぞれにスペースを割り当てる必要があります。

+0

いいえ。 OPはAFAICTの3つのストリングの配列を求めています。問題は 'char *'は文字列ではないということです。 'strcpy'呼び出しでコピーされるデータに割り当てられるスペースはありません。しかし、今はコードがコンパイルされていないので、... –

+0

@Karl、これはまさに私が答えの "少なくとも"の部分を意味していたものです。 – ysap

+0

申し訳ありませんが、その部分を逃しました。 :) –

関連する問題