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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。