gpt4 book ai didi

c - *** 检测到堆栈崩溃 ***//尝试打印一个字符

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:29 24 4
gpt4 key购买 nike

#include <stdio_ext.h>
#include <stdlib.h>
int main()
{
char a[10],c[10];
int i,b;

b=1;
i=0;

printf(": ");
scanf("%s",a);
fflush(stdin);
__fpurge(stdout);

while(i<=10)
{

c[i]=a[i]+b;
i++;

}
printf("%s",c);
return (EXIT_SUCCESS);
}

所以问题是我想用 ASCII 表 中的下一个字符打印一个字符,但每次运行它时都会出现此错误,尽管它似乎适用于大小为 10 的字符:

: asdf
*** stack smashing detected ***: /home/polo/Escritorio/ejemplo/dist/Debug/GNU-Linux/ejemplo terminated
bteg� c8�l�#w�@���
RUN FINISHED; Aborted; core dumped; real time: 4s; user: 0ms; system: 0ms

最佳答案

通过说

 while(i<=10)

你是 off-by one .应该是

 while( i < 10 )

因为 C 数组使用基于 0 的索引。

也就是说,根据 C11,第 7.21.5.2 章

If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.

所以,不要执行 fflush(stdin),从技术上讲,它会调用 undefined behavior .

最后,scanf("%s",a); 打开缓冲区溢出的潜力。像限制输入缓冲区长度

 scanf("%9s",a); //when a is an array of size 10

关于c - *** 检测到堆栈崩溃 ***//尝试打印一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40330755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com