lygguzgs 发表于 2014-7-17 21:51:13

哪位大神能解释下这样的传递有什么隐患吗?

#include <stdio.h>
void main()
{
char *a = "I am happy.",*b;
b = a;
printf("A=%s\nB=%s\n",a,b);
}
如上,完全可以实现,但是不知道有声明缺点,和隐患没有,求指导

牡丹花下死做鬼 发表于 2014-7-17 22:03:58

其他不说用 %s 就会有很大的隐患

戏++ 发表于 2014-7-17 22:09:53

问题不大吧

牡丹花下死做鬼 发表于 2014-7-17 22:10:42

简而言之 定义一个字符串指针会分配一个字节的内存来存放指针本身
他的内容就是字符串的地址但是这个地址能用的空间却不知道直接写内容
就有可能覆盖掉其他有用的内容

lygguzgs 发表于 2014-7-17 22:33:44

大概明白了,谢谢啦

牡丹花下死做鬼 发表于 2014-7-17 23:03:52

戏++ 发表于 2014-7-17 22:09
问题不大吧

你确定??? %s问题不大??

网络学习 发表于 2014-7-18 00:26:11

不难明白吧

zhoushilei 发表于 2014-7-18 01:25:47

本帖最后由 zhoushilei 于 2014-7-18 01:28 编辑

这样写其实没有什么问题的,对于printf说这个%S有问题,其实要这样说,这个函数本来就是有很多BUG的,除非要求效率,一般我都用C++的cout。
对于牡丹同学所谓的“但是这个地址能用的空间却不知道直接写内容就有可能覆盖掉其他有用的内容",c语言都是申请空闲空间的,当前的使用(被其他程序所占用)的空间是不会被再次申请到。而且释放的话,即使不写,编译器也会在程序结束后自动释放空间使其成为可用空间。而且你修改的是b空间,不是B所指向的地址的空间,即让A和B都指向放有”。。。。。“的空间。
指针这个东西就是一个不安全的东西,最好用引用。(by java users){:1_1:}

lygguzgs 发表于 2014-7-21 17:26:15

zhoushilei 发表于 2014-7-18 01:25
这样写其实没有什么问题的,对于printf说这个%S有问题,其实要这样说,这个函数本来就是有很多BUG的,除非 ...

谢谢您的回答,豁然开朗了,已经搞清楚它们之间的关系了 {:7_168:}
页: [1]
查看完整版本: 哪位大神能解释下这样的传递有什么隐患吗?