簡體   English   中英

如何為 sscanf 制作正確的格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM