お世話になっております。
現在C言語で下記のようなstrtokを使用したプログラムを作成しております。
(関係なさそうな箇所については省略しております。)
【ソース】
str="abc.def,ghi.jkl,mnopq.r,kkk.bbb"
for( a=strtok(str,",\n") , a , a=strtok(NULL,",\n"){
b=strtok(a,".");
c=strtok(NULL,"."):
}
【質問内容】
上記の内容を使用したソースでは、for文のa=strtok(NULL,",\n")にてaに値がはいりません。
(2回目のループに行かない)
上記のような処理を実施したい場合、皆様どのようなソースを作成しているかご教示いただけないでしょうか。
よろしくお願いいたします。
No.2
- 回答日時:
自力で分解する.
そもそもなぜうまくいかないか, 理解できていますか?
tacosanさん
ご回答ありがとうございます。
>そもそもなぜうまくいかないか, 理解できていますか?
b=strtok(a,".");
を実施したため、
a=strtok(NULL,",\n")
が正常に動作しないのではないか、という予想をしておりました。
しかし、WEBを調べても確信がもてなかったため、今回質問させていただきました。
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);
}
}
chie65535さん
ご回答ありがとうございました。
やはり、ループの中でstrtokを使用したことが問題だったのですね。。。
ソースまで添付いただきありがとうございました。
本当にたすかりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- MySQL MySQLのテーブル作成で 自信がありません。 2 2022/08/28 05:35
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
For文の終了値を関数にしても問...
-
if文の中にfor文なのか、for文...
-
do-while文が禁止される理由
-
C言語、whileループを抜け出す...
-
__asm int 3でのブレイクポイン...
-
入力した数値を倍々するプログラム
-
C言語forループが完結した場合...
-
UWSCにてある一定の動作を無限...
-
break文でループを一気に抜ける...
-
繰り返し文の利点について
-
Excel VBAで年度をまたぐ期間の...
-
while doについて
-
ループを途中で抜けたいのですが。
-
Delphiで・・・
-
エクセルVBAで Do While (1)って?
-
入力した文字列から母音だけを...
-
VBScriptでSQLに接続し、CSV出...
-
PIC のプログラムについて ど...
-
文字列を後ろから1文字ずつ表示...
-
桁数を求めるプログラム。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
入力した数値を倍々するプログラム
-
入力した文字列から母音だけを...
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
エクセルでC言語のfor文と同じ...
-
Excel VBAで年度をまたぐ期間の...
-
For文の終了値を関数にしても問...
-
エクセルVBAで Do While (1)って?
-
C言語、whileループを抜け出す...
-
PAD図の書き方
-
Cプログラムが終了しない
-
PIC のプログラムについて ど...
-
他言語で言うcontinue文
-
C言語のプログラムみてください...
-
ループの特定入力終了
-
COBOLのEVALUATE文
-
for文while文の無限ループの違...
おすすめ情報