[英]How to make proper format for sscanf
在這段代碼中:
#include <stdio.h>
int main()
{
char str[255];
int val;
sscanf("(abcd, 10)", "(%s, %d)", str, &val);
printf("string: %s; int: %d\n", str, val);
}
逗號,
在格式上不被識別,但作為正在掃描的字符串的一部分。 output:
string: abcd,; int: 0
並且因為sscanf
假設,
是字符串的一部分而不是格式的一部分,所以根本不掃描 int(int output,它的0
而不是10
)。 那么如何讓掃描儀將,
作為格式的一部分,而不是字符串呢?
...如何讓掃描儀考慮,作為格式的一部分,而不是字符串?
使用"%[]"
有選擇地掃描文本。
使用寬度來防止緩沖區溢出。
如果到達那么遠,請使用"%n"
記錄掃描的偏移量。
考慮" "
以允許在非關鍵位置使用空白。
測試潛在的錯誤。
考慮有關打印字符串以增加 output 清晰度的哨兵。
// sscanf("(abcd, 10)", "(%s, %d)", str, &val);
int n = 0;
// v------v scan up to 254 (1 less than buffer size) non-comma characters.
sscanf(input, " ( %254[^,],%d ) %n", str, &val, &n);
if (n == 0 || input[n]) {
fprintf(Stderr, "Scan failed or extra junk at the end.\n");
} else {
printf("string: \"%s\"; int: %d\n", str, val);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.