簡體   English   中英

Printf char []緩沖區溢出

[英]Printf char[] buffer overflow

我遇到了這個問題,我的名字是char [20],如果我插入某個字符,該數組將溢出並寫入另一個數組(cognome)。

我試圖用puts()來更改scanf(),但是最后一個將無法正常工作,因為它會跳出輸入並且什么也沒讀。


有人知道解決方案嗎?

這是代碼

void addStudent(){
    struct student s;
    printf("Inserire Nome: ");
    scanf("%20s",s.nome);
    printf("\nInserire Cognome: ");
    scanf("%30s",s.cognome);
    printf("\nInserire eta': ");
    scanf("%d",&s.anni);
}

結果

Inserire Nome: cjhsdjkhbsdkhfgsdjkhfgskjhgjkhsfs

Inserire Cognome: 
Inserire eta': 

更改為"%19s" 它必須比數組大小小1,因為scanf()寫一個空終止符。 調用scanf()您需要跳過任何未處理的輸入,這可以通過閱讀直到下一個新行字符來實現:

int ch;
while ((ch = getchar()) != EOF && ch != '\n');

如果離開一個字符,則應為空字節保留一個字符,這同樣適用於s.cognome

scanf("%19s",s.nome);

另外, scanfputs不可互換,第一個讀取某些內容,第二個輸出某些內容,您可能是指gets或更好的fgets

fgets(s.nome, 20, stdin);

暫無
暫無

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

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