sscanf操作文字列と整数の違い

1353 ワード

今日テストしてみると、sscanf操作文字列と整数型はフォーマットに違いがあることがわかりました.次に見てみましょう.次の2つの例は、文字列に対応する12347の数字を取ります.
まず、操作文字列を見てみましょう.
int main()
{
	char buf[100] = "F:12347_121|C:1223244_2323|S:547656|";
	char buf1[100] = "";
	
	sscanf(buf, "%*[^:]:%[^_]", buf1);
	printf("%s
", buf1); return 0; }
印刷:12347
ここで12347は文字列buf 1から取り出したものです.
完全な操作:
int main()
{
	char buf[100] = "F:12347_121|C:1223244_2323|S:547656|";
	int a = 0;
	
	sscanf(buf,"F:%d_%*[^|]|C:%*d_%*d|S:%*[^|]|",&a);
	printf("%d
", a); return 0; }
印刷:12347
ここでは型抜きを使います.
上の2つのsscanfでは対応するフォーマットが異なり、文字列のフォーマットは明らかに簡単で、フォーマット全体が複雑です.場合によっては取捨選択をする.
テストを見てみましょう.
int main()
{
	char buf[100] = "F:12347_121|C:1223244_2323|S:547656|";
	int a = 0;

	sscanf(buf, "%*[^:]:%[^_]", &a);
	printf("%d
", a); return 0; }
印刷:875770417
印刷エラーです.これは、操作が整っている場合、このような簡単なフォーマットは望ましくないことを証明します.
もう一度見てください.
int main()
{
	char buf[100] = "F:12347_121|C:1223244_2323|S:547656|";
	char buf1[100] = "";
	

	sscanf(buf,"F:%s_%*[^|]|C:%*s_%*s|S:%*[^|]|",buf1);
	printf("%s
", buf1); return 0; }
印刷:12347_121|C:1223244_2323|S:547656|
印刷が多くなりましたが、これも問題があります.
やっと分かった.