printf char []缓冲区溢出

Psy*_*ari 2 c printf

我有这个问题,我的nome是一个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);
}
Run Code Online (Sandbox Code Playgroud)

结果

Inserire Nome: cjhsdjkhbsdkhfgsdjkhfgskjhgjkhsfs

Inserire Cognome: 
Inserire eta': 
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 6

改为"%19s".scanf()写入空终止符时,它必须比数组大小少一个.在scanf()您调用之后需要跳过任何未处理的输入,这可以通过读取直到下一个换行符来实现:

int ch;
while ((ch = getchar()) != EOF && ch != '\n');
Run Code Online (Sandbox Code Playgroud)