1

ファイルをトークン化して、特定の文字列を配列に挿入しようとしています。ファイルをトークン化して各トークンを印刷すると正常に機能しますが、各トークンを配列に入れて配列の内容を印刷すると、内容がまったく同じになりません。

char *filenames[1000];    
token = strtok(line, " ");              
while (token != NULL) {                     
    printf("%s\n", token);                      
    /*                      
      filenames[i] = token;                     
      i++;                      
    */                      
    token = strtok(NULL, " ");                  
}                   
ck = fgets(line, 1000, fp);    
for (j = 0; j <= i; j++){               
    printf("%s \n", filenames[j]);              
}

ファイル名の配列をmallocするのか、それとも各トークンをmallocするのか。

4

1 に答える 1

1

同じポインターを何度も再利用し続けます。次のようなものを試してください:

filenames[i] = strdup(token);

また、それらを使い終わったときにも覚えておく必要がありfree(filenames[i])ます。


持っていない場合はstrdup、自分でロールするか、次を使用できます。

filenames[i] = malloc(strlen(token) + 1);    /* XXX check malloc return. */
strcpy(filenames[i], token);
于 2012-12-05T21:31:49.100 に答える