【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18846

ファイル内のデータをトークンに分解し得配列に格納
投稿者---あや(2004/12/22 11:59:54)


ファイル内のデータをトークンに分解して配列に格納するプログラムを
次のように組んでみたのですが、データを1行読み込んだところでエラーしました。何故エラーしたか分からないのでどなたかお願いします。
対象ファイルには、例えば
1.23 2 4.54
2.2 3.44 4.1
3.11 4 5.11
のような適当な数値のデータが入っています。

#include <stdio.h>
#include <string.h>

int main( void )
{
FILE *fp;
char filename[20],ss[100],hairetu[100][100],*token,*delim = " "; // delimは空白文字を区切り文字とする
int i = 0; // iはトークンカウント

puts("Input filename");
gets(filename);

fp = fopen ( filename,"r");
while ( fgets( ss, 256, fp ) != NULL){
// 文字列の先頭アドレスを渡す
token = strtok( ss, delim );
while ( strcpy( hairetu[ i ], token ) != NULL ){
token = strtok( NULL, delim );
printf("token[%d] = %s\n",i,hairetu[i]);
i++;
}
}
fclose(fp);
return 0;
}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイル内のデータをトークンに分解し得配列に格納 18849 επιστημη 2004/12/22 13:14:17


No.18849

Re:ファイル内のデータをトークンに分解し得配列に格納
投稿者---επιστημη(2004/12/22 13:14:17)


> while ( strcpy( hairetu[ i ], token ) != NULL ){

ここで token が NULL になっているため、
不正なアドレスからstrcpyしたんじゃないでしょか。


この投稿にコメントする

削除パスワード

No.18853

Re:ファイル内のデータをトークンに分解し得配列に格納
投稿者---あや(2004/12/22 15:48:11)


>> while ( strcpy( hairetu[ i ], token ) != NULL ){
>
>ここで token が NULL になっているため、
>不正なアドレスからstrcpyしたんじゃないでしょか。

while ( token != NULL ){
strcpy( hairetu[i], token);

に直してコンパイルしたらエラーがなくなり、上手くいきました。
ありがとうございました。


この投稿にコメントする

削除パスワード

No.18854

Re:ファイル内のデータをトークンに分解し得配列に格納
投稿者---επιστημη(2004/12/22 16:40:57)


僕ならこう書く

while ( fgets( ss, 256, fp ) != NULL) { 
  char* buffer = ss;
  char* token;
  while ( (token = strtok(buffer,delim)) != NULL ) {
    buffer = NULL;
    strcpy( hairetu[ i ], token );
    printf("token[%d] = %s\n",i,hairetu[i]);
    i++;
  }
}




この投稿にコメントする

削除パスワード

No.18855

Re:ファイル内のデータをトークンに分解し得配列に格納
投稿者---Hermit(2004/12/22 22:10:56)


>僕ならこう書く
私はこうかな・・・

while ( fgets( ss, 256, fp ) != NULL) { 
  char* token;
  if (token = strtok(ss,demil) {
    do {
      strcpy( hairetu[ i ], token );
      printf("token[%d] = %s\n",i,hairetu[i]);
      i++;
    } while (token = strtok(NULL,delim));
  }
}

好みの問題だけど、2回目以降!って意思表示かな。


この投稿にコメントする

削除パスワード

No.18859

Re:ファイル内のデータをトークンに分解し得配列に格納
投稿者---NykR(2004/12/22 23:04:00)


>>僕ならこう書く
>私はこうかな・・・
僕はこうですね。
while ( fgets( ss, 256, fp ) != NULL) { 
    char* token;
    for (token = strtok(ss,demil); token != NULL; token = strtok(NULL, demil)) {
        strcpy( hairetu[ i ], token );
        printf("token[%d] = %s\n",i,hairetu[i]);
        i++;
    }
}



この投稿にコメントする

削除パスワード

No.18866

Re:ファイル内のデータをトークンに分解し得配列に格納
投稿者---Hermit(2004/12/23 09:13:13)


そうか、そっちの方が主張がはっきり見やすいか。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧