char tmp[32]; memset( tmp, '\0', sizeof(tmp)); int ret = recv( sock, tmp, sizeof(tmp), 0 ); printf("%s\n", tmp)
把 buffer 填滿固然是一件好事,但是字串填滿之後,結果沒有\0了
就會發生意想不到的事情,可能會出現程式記憶體存取違規的問題
( 字元陣列的結尾正常結束都要有個 \0 才是正確的 )
假設我們不看 ret 回傳收到多大的資料,考慮使用 strcat 來把回傳的 buffer
串到更大的 buffer 字元陣列,應該要扣掉1來使用,避免發生記憶體存取違規!
char tmp[32]; int ret; if( (ret = recv( sock, tmp, sizeof(tmp) - 1, 0 ) ) > 0 ) { tmp[ret] = 0x0; printf("%s\n", tmp); }
如果字元陣列尾端沒有 \0 就會引起 Access Violation 記憶體存取違規。
沒有留言:
張貼留言