No.3ベストアンサー
- 回答日時:
先の方達の回答に補足します。
strtok で要件を満しますし、私も strtok 使うと思います。
ただ、これちょっと癖が有ります。
strtok は走査したバッファの内容を書き換えてしまいます。
例えば
char* pszToken = NULL;
char szBuff[] = "あああ,いい,うえお";
(実際は終端 \0 が在り "あああ,いい,うえお\0" となっている)
pszToken = strtok(szBuff, ",");
この時 szBuff の内容は "あああ\0いい,うえお\0" となり、
pszToken は "あああ" の部分の先頭を指します。
(szBuff の0バイト目)
pszToken = strtok(NULL, ",");
第1引数 NULL は前回の strtok の続きをやる、という意味です。
2回目で szBuff の内容は "あああ\0いい\0うえお\0" となり、
pszToken は "いい" の部分の先頭を指します。
(szBuff の7バイト目)
pszToken = strtok(NULL, ",");
3回目は szBuff の内容が "あああ\0いい\0うえお\0" のままです。
(元々在った終端 \0 に上書きしているのかも知れませんが)
pszToken は "うえお" の部分の先頭を指します。
(szBuff の12バイト目)
pszToken = strtok(NULL, ",");
4回目は szBuff の内容は変わらず、
pszToken には NULL が返ります。
(#2さんのように、これで切り分け処理終了のロジックを書きます)
なので、元々の szBuff[] = "あああ,いい,うえお" というデータを
後でまた使いたい可能性が有るなら、strtok には別領域にコピーした
物を渡すようにしましょう。
尚、対象となるデータを CString で保持している場合は、そのまま
では渡せないので GetBuffer で内容書き換え可能なポインタを取得
するか、充分な大きさの char 配列や new 等で必要サイズ確保した
領域にコピーした物を使います。
回答ありがとうございます。
#1のお礼の欄に書いておきましたサイトでも、同様のことが図解入りで書いてありましたので、大変良く分かりました。
No.2
- 回答日時:
strtokで
char*p;
chara[] = "あああ,いい,うえお";
char*b[3];
inti = 0;
for( p = strtok(a, ","); p != NULL; p = (strtok(NULL, ",")) ){
b[i] = p;
i++;
}
で、いいだけでは?。
char*でポインタ位置をとっているだけなので、
その点は気を付けてください。
No.1
- 回答日時:
strtok()で十分かもしれません。
回答ありがとうございます。
strtok()で検索したら、大変分かりやすい以下が見つかりました。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Excel(エクセル) LEFT関数で文字数を指定しないで取りだす方法 7 2023/06/30 09:49
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2022/12/08 15:45
- Visual Basic(VBA) VBA B列にある前から10文字のみ表示 3 2023/08/07 11:24
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でポインターで詰まってい...
-
C++Builder 2009 テキスト...
-
SubStringの使い方について
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
共用体について
-
簡易版smtpクライアント(メール...
-
c言語でポインタ変数を用いた配...
-
C言語の2次元文字配列について...
-
文字列str内の全ての数字を...
-
C言語 strstrの実装
-
const char* s1とただのchar s1...
-
std::stringクラスのc_str()で...
-
C言語のプログラムについてです
-
c言語のポインタへの文字列入力...
-
C言語 配列の長さの上限
-
関数から配列を返すには?
-
init関数の意味
-
long型のデータをバイト型の配...
-
fopne で失敗する原因
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
C言語のintとcharの違いってな...
-
小数点入りの文字列をfloat型に...
-
new charとnew char[N]の違いは?
-
const char* s1とただのchar s1...
-
DWORDとcharの変換
-
strcat関数を自作したいです
-
C++17で、unsigned char * 配列...
-
文字列内の数字削除
-
エクセルのMID関数は、C言語では?
-
char 文字列型 の表現範囲が-12...
-
char型にint型の数値を代入する。
-
C言語を用いた環境変数の作成/...
-
動的メモリの初期化方法について。
-
fstream型オブジェクトを関数の...
-
C言語のプログラムについてです
-
文字列の途中から途中までを抽出
-
C言語:小文字を大文字に変換す...
おすすめ情報