• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:strtokを使用したループ内でのstrtok)

strtokを使用したループ内でのstrtok

このQ&Aのポイント
  • C言語でstrtokを使用したプログラムを作成している際、for文内でのstrtokの使い方に問題があります。
  • ループ内のstrtokで値が正しく代入されないため、2回目のループに進むことができません。
  • 他の方はどのようなソースコードを作成しているのか、教えていただけないでしょうか?

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

  • ベストアンサー
回答No.3

「b=strtok(a,".");」をやった瞬間、strは「abc+EOS」になります。この時点で、forの続きのstrtokは出来なくなります。 また、for文の中の「a=strtok(NULL,",\n")」は「b=strtok(a,".");」の続きのstrtokになります。 うまく動かすには、forループ用のstrは壊してはいけないし、forループが終わるまで、他のstrtokは行ってはいけません。 すると、以下のようなソースになります。 #include <stdio.h> #include <string.h> void main(void) {  int i,j;  char *str,*a[100],*b,*c;  str="abc.def,ghi.jkl,mnopq.r,kkk.bbb";  for( i = 0,a[0] = strtok(str,",\n") ; (a[i]) && (i < 100) ; a[++i] = strtok(NULL,",\n")) {;}  for( j = 0; j < i; j++) {   b=strtok(a[j],".");   c=strtok(NULL,".");   printf("b=%s\n",b);   printf("c=%s\n",c);  } }

oniku029
質問者

お礼

chie65535さん ご回答ありがとうございました。 やはり、ループの中でstrtokを使用したことが問題だったのですね。。。 ソースまで添付いただきありがとうございました。 本当にたすかりました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

自力で分解する. そもそもなぜうまくいかないか, 理解できていますか?

oniku029
質問者

お礼

tacosanさん ご回答ありがとうございます。 >そもそもなぜうまくいかないか, 理解できていますか? b=strtok(a,"."); を実施したため、 a=strtok(NULL,",\n") が正常に動作しないのではないか、という予想をしておりました。 しかし、WEBを調べても確信がもてなかったため、今回質問させていただきました。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

#include <stdio.h> #include <string.h> int main(){ char *str = "abc.def,ghi.jkl,mnopq.r,kkk.bbb"; char *a; a = strtok(str,",\n"); while( a != NULL ){ printf("%s\n",a ); a = strtok(NULL,","); } return 0; }

oniku029
質問者

お礼

nora1962さん ご回答ありがとうございました。

関連するQ&A