
CでCGIを書く上で、perlのsplit命令の代替になるようなライブラリを探しています。
www=xxx&yyy=zzz という引数をchar型の配列に入れ、それを & で分割し、次に = で分割して
query[0].name = www; query[0].value = xxx
query[1].name = yyy; query[1].value = zzz
などと、perlと同等のことをさせたいのですが、文字列をその都度走査していたのでは処理が莫大になりそうなので、もしご存知であれば教えていただければと思います。
No.1ベストアンサー
- 回答日時:
strtokがありますが、結局自分で少しは書かなくてはいけないと思います。
ちょっとCで書いてみました。関数化すればよいと思います。
struct QUERY {
char *name;
char *value;
};
void XXX()
{
char *kari = "www=xxx&yyy=zzz";
char qbuf[128];
strcpy(qbuf, kari);
struct QUERY *query;
char *p;
int count = 1;
for (p = qbuf; *p != '\0'; p ++) {
if (*p == '&')
count ++;
}
query = (struct QUERY *)malloc(sizeof(struct QUERY) * count);
count = 0;
query[0].name = qbuf;
for (p = qbuf; *p != '\0'; p ++) {
if (*p == '=') {
*p = '\0';
query[count].value = p + 1;
} else if (*p == '&') {
*p = '\0';
count ++;
query[count].name = p + 1;
}
}
free(query);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
アルファベットの出現頻度求め...
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
switch文で文字を比較すること...
-
ftoa の作り方
-
CStringをwchar_tに変換したい
-
C言語のポインターで詰まっている
-
配列をnビットシフトする
-
【C言語】構造体内の領域解放(...
-
文字を16進変換
-
c++ 文字列を入力して、一文字...
-
起動時の引数の取得方法が分か...
-
pingの結果を取得する方法
-
char* を渡したとき、不適切なP...
-
fgetc()関数の動作について
-
charからLPTSTRへの変換方法
-
charでの計算?
-
間接操作のレベルとは
-
テキストデータをそのままバイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構造体の各メンバにfor文からア...
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
間接参照のレベルが異なっています
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
charからLPTSTRへの変換方法
-
ネットワークにつながっている...
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
c言語でユーザ関数を利用して入...
-
atoi( ) の反対をやりたい
-
間接操作のレベルとは
-
-'0'の意味について
-
double型の値をchar配列に変換...
-
Linuxでフォルダ内全ファイル名...
-
配列をnビットシフトする
-
型変換
おすすめ情報