成都网站建设设计

将想法与焦点和您一起共享

c语言指针调用函数危险吗 c语言通过指针调用函数

为什么C语言编程中使用指针不当会导致严重后果?会使机器硬件损坏?

因为指针不像我们平时用数组那么直观 而且随着指针指向的不同 对应数据也相应改变 如果使用不当 会出现连自己都不知道具体对应什么东西 使程序跑飞 报错 相当的常见 机器硬件一般是不会损坏的只是烧进去的程序运行错误

创新互联公司主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务宽城,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

C语言指针造成的严重后果举例有哪些?

C语言指针造成的严重后果举例有:代码无法运行,计算机崩溃无反应等。

比如,你不对指针赋初值,他就会指向一个不确定的地方,万一是关键进程,系统地址什么的,你的机器就自然会崩溃。学习 C 语言的指针既简单又有趣,但是C语言对找工作也是非常有帮助的,C语言也比JAVA实用性好。

C语言指针的特点:

通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。正如所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用  运算符访问的地址,它表示了在内存中的一个地址。

c语言为什么有函数危险一说啊? 比如gets()的溢出操作等;

是的,如果这是某书上的做法,那么,我只能说它为你们提供了一个错误的榜样。

这样使用gets()已经发生了溢出!这是gets()不检查数据边界的bug造成的。

另外,“字符串不是总是以'\0'作为串的结束符”,答案是肯定的,不然puts()函数就不能在合适的地方停下来了。这里st[15]被gets()函数赋值为'\0'。这里要说明的是st[15],st[16]是存在而不合法的,因为字符串实际上就等同于指针,类似st[16]是实在的地址但是是不应该被引用的。

为什么这里溢出没有产生错误?可能系统分配内存是以一个最小的大小整段整段的分配(这个我只是猜测)。你可以试着输入的字符串变长一点,就可以看到内存读写出错的提示了,这就是溢出的严重后果!我在dos系统下测试字符串长了直接当机。

验证1:st[15]被赋值为'\0'

#include"stdio.h"

main()

{

charst[15];

printf("inputstring:");

gets(st);

puts(st);

printf("%d",st[15]);

getch();

}

验证2:

#include"stdio.h"

main()

{

charst[15];

printf("inputstring:");

gets(st);

puts(st);

//printf("%d",st[16]);

st[1]='\0';

printf("%s\n",st);

printf("%s",st+2);

getch();

}

同样的建议:拒绝gets(),这本来就是一个有bug的函数!


本文题目:c语言指针调用函数危险吗 c语言通过指针调用函数
网站网址:http://chengdu.cdxwcx.cn/article/dogcgpp.html