• ベストアンサー

配列への文字列の格納について

C言語で文字列を扱う時、配列に1文字ずつ格納していくか、ポインタ変数を使うと思うのですが、 ポインタ変数を使った場合の処理が上手くできずに困っています。 詳細を説明すると、値を取得して、前回取得した値と比較します。 それで、同じだった場合には"chritm1"に格納した矢印を書き込む処理なのですが、 現在はfor文により配列に格納したものを使用していますが、 この部分をポインタ変数を使用した処理(1文字1文字書くのではなく、string型変数の用に書き込みたい) に変更したいのですが、上手くできないという状況です。 何かとっかかりとなるようなことでもかまいませんので、教えてください。 よろしくお願いします。 static int mainA( char *fileName){ int loop, i, j; FILE *fd; /* 前回値格納用 */ char *preval; /* 現在値格納用 */ char *thisval; /* 同値用記号格納用 */ char chritm1[6] = " → "; -- 中略 -- for( i = 0 ; i < 150 ; i++ ) { thisval = redata[i]; /* 値の比較 */ if(preval == thisval) { for( j = 0 ; j < 6 ; j++){ /* 前回値と同じ場合は矢印 */ fprintf( fd, ",%c",chritm1[j]); } }else{ /* 前回値と異なる場合は値 */ fprintf( fd, ",%s", thisval); } preval = thisval; /*完了したら改行 */ fprintf( fd, "\n" ); } -- 以下略 --

質問者が選んだベストアンサー

  • ベストアンサー
  • goosyu
  • ベストアンサー率58% (36/62)
回答No.1

 たぶん次の1行が答えと思います。(",%c"という記述があるので,for文の処理とは同じ結果になりませんが問題ないはず。) fprintf( fd, ",%s", chritm1 );  また、値の比較として「if(preval == thisval)」としていますが正常に動作しない気がします。  値が文字列として格納されているのであればstrcmp()関数で比較するか一度数値に変換して比較する必要があります。

agl
質問者

お礼

ご指摘いただいた点を修正したら出力することができました。 出力形式を変えればよかったんですね。 本当にありがとうございました。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

if (preval == thisval) このif文はprevalの値とthisvalの値を比較しています。 双方の値(どこかを指しているアドレス値)は通常異なります。 このif文の結果は偽となります。 prevalが指している文字列の内容とthisvalが指している文字列の内容が一致しているかどうかを確認するときは if (strcmp(preval, thisval) == 0) と書きます。

agl
質問者

お礼

ホントですね。。。 int型みたいな感じで使ってしまってました。 教えていただいてありがとうございました。

関連するQ&A