C言語の標準ライブラリで文字列をパースしようとしたら、sscanf()が候補に出てくると思う。
数字のCSV形式を読むのに使っていて動いていたのだが、文字列をやろうとしてつまづいたので、記録を残しておこう。
01: #include <stdio.h>
02: #include <stdlib.h>
03:
04: int main(void)
05: {
06: const char STR[] = "yoshio@192.168.0.1:1234";
07: char name[20] = "";
08: char ipaddr[15 + 1] = "";
09: int port = -1;
10: int ret = sscanf(STR, "%s@%s:%d", name, ipaddr, &port);
11: printf("ret=%d\n", ret);
12: printf("name=%s\n", name);
13: printf("ipaddr=%s\n", ipaddr);
14: printf("port=%d\n", port);
15: }
ret=1
name=yoshio@192.168.0.1:1234
ipaddr=
port=-1
こうすると、期待通りになった。
01: #include <stdio.h>
02: #include <stdlib.h>
03:
04: int main(void)
05: {
06: const char STR[] = "yoshio@192.168.0.1:1234";
07: char name[20] = "";
08: char ipaddr[15 + 1] = "";
09: int port = -1;
10: int ret = sscanf(STR, "%[^@]@%[^:]:%d", name, ipaddr, &port);
11: printf("ret=%d\n", ret);
12: printf("name=%s\n", name);
13: printf("ipaddr=%s\n", ipaddr);
14: printf("port=%d\n", port);
15: }
ret=3
name=yoshio
ipaddr=192.168.0.1
port=1234
「文字列の中にデリミタの文字は入ってませんよー」という宣言がいる、ということかな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。