使用snprintf函式時要注意兩點,這是我看過無數使用這個函式的程式設計師絕大部分都存在的兩點隱患:
比如: char buf[len];
int n = snprintf(buf, len, "%s%d%s", str1, int2, str3);
1.snprintf會自動在格式化後的字串尾新增\0, 所有格式化長度,也就是第二個引數沒有必要用len-1, 這樣會浪費乙個位元組的空間。
當buf的空間不夠用時,會自動截斷,並在結尾加上\0,所以不必擔心緩衝區溢位。
2.很多人都以為返回值n就是buf中存的格式化字串的長度,其實不然。當呼叫失敗時,n為負數,當呼叫成功時,n為格式化的字串的總長度(不包括\0),當然這個字串有可能被截
斷,因為buf的長度不夠放下整個字串。
所以不要用直接用返回值n作為
buf的長度。即n 不一定等於 strlen(buf)。
總結:
snprintf 的返回值 n
if ( n < 0) : snprintf出錯了
if ( n >0 && n < sizeof(buffer) ) : snprintf成功,並且格式了完成的字串。
if ( n >= sizeof(buffer) ) : snprintf成功,但要格式化的字串被截斷了。
使用socket套接字時的兩點經驗
使用socket套接字時的兩點經驗 最近我在使用socket程式設計的工作,總結了2點經驗,希望和大家分享一下。由於是菜鳥,有不對的地方還希望多多指教。第一點經驗就是在建立新的套接字之前還需要呼叫乙個引入ws2 32.dll庫的函式。否則伺服器和客戶端連不上。由於初次使用socket,所以查了很多資...
使用count 要注意的兩點
一 null和false的不同 result count null result 0 result count false result 1 二 是否遞迴計算 food array fruits array orange banana veggie array carrot collard pea ...
使用count 要注意的兩點
一 null和false的不同 result count null result 0 result count false result 1 二 是否遞迴計算 food array fruits array orange banana veggie array carrot collard pea ...