sprintf sscanf中的乙個小坑

2021-07-09 17:52:39 字數 693 閱讀 9231

char buf[32] = ;

sprintf(buf, "%s,%d", "test", 100);

char out[32] = ;

int i = 0;

sscanf(buf, "%s,%d", out, &i);

這段**,開始以為會正常執行,結果卻是crash。

sscanf在解析%s的時候遇到空格、指標符號、\n才會停止解析,而這個%s後面的逗號基本上是乙個擺設。上面這行out的資料就是「test,100」,這直接導致i解析失敗。

所以,遇到這種情況,可以用

char buf[32] = ;

sprintf(buf, "%s %d", "test", 100);

char out[32] = ;

int i = 0;

sscanf(buf, "%s %d", out, &i);

如果字串用空格或者指標符或者\n,也可以用這種

char buf[32] = ;

sprintf(buf, "%s,%d", "test test", 100);

char out[32] = ;

int i = 0;

sscanf(buf, "%[^,],%d", out, &i);

sprintf,sscanf函式詳解

一,sprintf函式 原型 int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字為變數轉換字串。2 得到整型變數的16進製制和8進製字串。3 連線多個字串。例子 int main int argc,char ar const ...

Python中的descriptor中的一點疑問

在我的印象中,類中的函式是可以有兩種呼叫方式的,如下 class b def func self return 10 b b b.func b.func b 於是,在之前研究descriptor的時候,我就有了幾點困惑 我將 更換成了如下兩個版本 版本1 import time class lazy...

python中的dict Python中的dict

dict python內建了字典 dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵 值 key value 儲存,具有極快的查詢速度。d print dict get michael d michael add a element d adam 67 print d...