簡體   English   中英

C sscanf和字符串格式

[英]C sscanf and string format

在了解sscanf字符串格式時,我遇到了一些問題。

我將那個字符串存儲在str中192.168.0.100/act?bla=

我希望使用此代碼將bla存儲在我的“鍵”變量中,並將其余內容(在“ =”之后)存儲在我的“ buf”變量中

char str[] = "192.168.0.100/act?bla=";
char key[20];
char buf[100];
sscanf(str, "%*[^?] %[^=] %s", key, buf);

? =將不會被使用,因此請將它們包含在格式說明符中:

sscanf(str, "%*[^?]?%[^=]=%s", key, buf);

請參閱http://ideone.com/YoRMh3上的演示。

為了防止緩沖區溢出,請指定每個說明符可以讀取的最大字符數,該字符數比目標數組少一個,以允許空終止,並通過檢查sscanf()的返回值來確保兩個數組都被填充:

if (2 == sscanf(str, "%*[^?]?%19[^=]=%99s", key, buf))
{
    printf("<%s>\n", key);
    printf("<%s>\n", buf);
}

為了確保buf值不被截斷,可以使用%n格式說明符,該說明符填充一個int值,該整數值指示處理停止的位置(請注意, %nsscanf()的返回值沒有影響)。 如果處理了整個輸入,則結束位置為strlen(str)

int pos;
if (2 == sscanf(str, "%*[^?]?%19[^=]=%5s%n", key, buf, &pos) &&
    strlen(str) == pos)
{
    printf("<%s>\n", key);
    printf("<%s>\n", buf);
}

您可以添加受保護的字符,以便將其讀取和忽略:

sscanf(str, "%*[^?]?%[^=]=%s", key, buf);

注意 '?' 和'='仍在流中,並且在處理[^=]之后不會被讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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