QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 784|回复: 9

C语言遇到了一个奇怪的问题希望指教(在线等)

[复制链接]
发表于 2004-12-16 22:02:03 | 显示全部楼层 |阅读模式
include <stdio.h>

char * fac( )
{
        char * line = "abcdefgh";
        return line;
}

int main( int argc, char * argv[] )
{
        char * len;
        len = fac( );
        fprintf(stdout,"%s\n",len);
       
        return 0;
}
和朋友讨论了很久也没有得到答案,函数fac中的 line应该是个局部变量他但是我却成功的返回了他的值~不知道这是为什么请指教
发表于 2004-12-17 00:15:59 | 显示全部楼层
include <stdio.h>

char * fac( )
{
char * line = "abcdefgh";
return line;
}

void fack()
{
    int a = 0;
    int b = 0;
}

int main( int argc, char * argv[] )
{
char * len;
len = fac( );
fack();
fprintf(stdout,"%s\n",len);

return 0;
}

你再用下这个。
回复

使用道具 举报

发表于 2004-12-17 00:20:51 | 显示全部楼层
很正常啊。
回复

使用道具 举报

发表于 2004-12-17 10:40:16 | 显示全部楼层

Re: C语言遇到了一个奇怪的问题希望指教(在线等)

[quote:7e683b0798="Rayter"]include <stdio.h>

char * fac( )
{
        char * line = "abcdefgh";
        return line;
}

int main( int argc, char * argv[] )
{
        char * len;
        len = fac( );
        fprintf(stdout,"%s\n",len);
       
        return 0;
}
和朋友讨论了很久也没有得到答案,函数fac中的 line应该是个局部变量他但是我却成功的返回了他的值~不知道这是为什么请指教[/quote]

你的理解是完全正确的, 出现这种情况的原因是,因为你声明时用的是
"abcdefgh"的字符串, 编译的时候,这个字符串会做为静态值会放到一个
固定的内存空间(程序的数据段)里,你你再申请新的内存,也不会覆盖这
部分内存的内容, 而你传出的指针就是指向这块内存的, 当然是对的了。
回复

使用道具 举报

发表于 2004-12-17 11:04:36 | 显示全部楼层
还是看汇编码吧!我现在在Windows下,不方便。
回复

使用道具 举报

发表于 2004-12-17 11:10:45 | 显示全部楼层
其实不用看。
楼上正解。
回复

使用道具 举报

发表于 2004-12-17 11:49:49 | 显示全部楼层
include <stdio.h>

char * fac( )
{
char * line = "abcdefgh";
return line;
}

void fack()
{
char *another="ijklmnopqrst";//will this over-cover "abcdefgh"
}

int main( int argc, char * argv[] )
{
char * len;
len = fac( );
fack();
fprintf(stdout,"%s\n",len);

return 0;
}
回复

使用道具 举报

发表于 2004-12-17 12:27:31 | 显示全部楼层
[quote:135c92704e="longwen"]include <stdio.h>

char * fac( )
{
char * line = "abcdefgh";
return line;
}

void fack()
{
char *another="ijklmnopqrst";//will this over-cover "abcdefgh"
}

int main( int argc, char * argv[] )
{
char * len;
len = fac( );
fack();
fprintf(stdout,"%s\n",len);

return 0;
}[/quote]


just try it, you will see the truth anyway.
回复

使用道具 举报

发表于 2004-12-17 12:52:18 | 显示全部楼层
你试一下把,把答案写出来。
我猜测是jklmnopq。我现在写程序不方便
回复

使用道具 举报

发表于 2004-12-17 12:56:25 | 显示全部楼层
yunfan兄,加我QQ吧:157176614
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 21:39 , Processed in 0.054025 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表