造成程序停止运行d框出错的可能原因如下:
内存溢出
内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件
造成内存溢出的原因可能有:
1>栈区溢出,例如在main函数内开辟的数组空间过大,一般机器的栈区限制在8MB左右,如果开辟的数组大小超过限制,程序就会崩溃。通常的解决方法是申请堆内存,即将较大的数组作为全局变量开在main函数之外。
2>错误地址访问,常见的非法访问包括指针漂移,数组越界等,初学者也经常出现类似scanf函数没加区地址符号&的情况导致在读取变量的时候因非法访问造成的溢出。
3>数据类型不符,问题和第二个类似,例如在声明变量时声明为int在输出变量时却用了%lld,就会造成因数据类型不符而导致的溢出。
编译器错误
部分编译器由于所使用的标准不同(例如在一台机器上使用的可能是C99标准,而另一台机器上使用的是C11标准),或是因为编译器链接库的损坏,在少数情况下也可能导致程序出现不限于崩溃退出的异常错误,通常解决方法是到编译器官方网站下载最新版的IDE安装。
输入输出函数非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替,
但
这些函数编译后代码少,
相对占用内存也小,
从而提高了速度,
同时使用也比较
方便。下面分别进行介绍。
一、puts()和gets()函数
1.
puts()函数
puts()函数用来向标准输出设备(屏幕)写字符串并换行,
其调用格式为:
puts(s)
其中s为字符串变量(字符串数组名或字符串指针)。
puts()函数的作用与语printf(”%s\n”,
s)相同。
例3:
main()
{
char
s[20],
*f
strcpy(s,
“Hello!
Turbo
C2.0″)
f=“Thank
you”
puts(s)
puts(f)
}
说明:
(1).
puts()函数只能输出字符串,
不能输出数值或进行格式变换。
(2).
可以将字符串直接写入puts()函数中。如:
puts(“Hello,
Turbo
C2.0”)
2.
gets()函数
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束,
但回车符
不属于这个字符串。其调用格式为:
gets(s)
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf(“%s”,
&s)相似,
但不完全相同,
使用scanf(“%s”,
&s)
函数输入字符串时存在一个问题,
就是如果输入了空格会认为输入字符串结束,
空格后的字符将作为下一个输入项处理,
但gets()
函数将接收输入的整个字符
串直到回车为止。
例4
main()
{
char
s[20],
*f
printf(“What’s
your
name?\n”)
gets(s)
puts(s)
puts(“How
old
are
you?”)
gets(f)
puts(f)
}
你的C语言程序中,输入语句scanf("%d,&a")和scanf("%d,&b")写错了,应该是scanf("%d",&a)和scanf("%d",&b)双引号的位置不对.
你的C语言程序我帮你改完了,你看看吧(改动的地方见注释)
#include <stdio.h>int main(){
int a,b,c,d,e,f,g
printf("请输入a的值:\n")
scanf("%d",&a) //这里把scanf("%d,&a")改成scanf("%d",&a)
printf("请输入b的值:\n")
scanf("%d",&b) //这里把scanf("%d,&b")改成scanf("%d",&b)
c=a+b
d=a-b
e=a*b
f=a/b
g=a%b
printf("a+b的值为:%d\n",c)
printf("a-b的值为:%d\n",d)
printf("a*b的值为:%d\n",e)
printf("a/b的值为:%d\n",f)
printf("a%b的值为:%d\n",g)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)