scanf的溢位控制與替代使用

2021-07-29 03:27:25 字數 1481 閱讀 2190

如果str在堆中申請的空間較小,使用scanf(「%s」,str)時,很容易發生溢位,怎麼解決呢???

#include 

#include

int main(int argc, char *argv)

輸出結果如下:

[centos7 at localhost test1]$ ./scanf

please input(10

at most):123456789

str: 123456789

[centos7 at localhost test1]$ ./scanf

please input(10

at most):12345678901234567890

str: 12345678901234567890

[centos7 at localhost test1]$

#include 

#include

int main(int argc, char *argv)

輸出結果如下:

[centos7 at localhost test1]$ ./scanf

please input(10

at most):1234

str: 1234

[centos7 at localhost test1]$ 1234567890

bash: 1234567890: command not found...

[centos7 at localhost test1]$

總結:通過在scanf函式中新增個數控制,可以防止溢位的情況!!!

#include 

#include

#include

#include

#define array_size(array) (sizeof(array)/sizeof(array[0]))

static

char *

parse_version = "1.0.1";

static

const

struct option

long_opts = ,

,};static

const

char *

optstring = "hp:";

static

char *

parse_options = ;

static

void

help(void)

}int

main(int argc, char* argv)

}if (str == null)

//handler

printf("str: %s\n",str);

return

0;}

scanf與printf使用詳解

scanf 格式控制 變數位址 如 scanf d n 其中n為變數,在定義完成乙個變數後,系統會為該變數分配記憶體空間 該空間在記憶體中的位址稱為變數的位址。為了得到變數的位址可以使用取位址操作 scanf的格式符如下 資料型別 格式符int dlong long lld double lfflo...

printf與scanf簡單使用

寫 怎麼可能少了輸入輸出,下面來說說printf和scanf的簡單使用 includeint main 下面我們來看乙個例子,很簡單就是列印乙個整形變數 includeint main 一般我們需要設定最小寬度和對齊方式,這個經常忘記怎麼使用,所以記錄一下 includeint main 其實,最想...

關於Scanf函式的使用!

這裡講一下我自己在程式設計過程中的例子 2.截圖太麻煩,直接打程式了 應當注意的是 如果在 格式控制字串 中除了格式宣告外還有其他字元,那麼需在輸入資料時對應的位置上字元要保持一致 例如scanf a f,b d n a,b 則需輸入a 1,b 2 而不是直接輸入1 2,會導致錯位結果不理想 3.當...