当前位置: 代码迷 >> C语言 >> 指针问题
  详细解决方案

指针问题

热度:218   发布时间:2006-10-12 20:29:12.0
char *getstring(void)
{
char *p = "aaaaaaaa";
return p;
}
void main(void)
{
char *q = NULL;
q = getsring();
printf("%s",q);
}
----------------解决方案--------------------------------------------------------
怎么还在发呢的..你注意一下你的笔误好不好,不是大写就小写的,还有漏写q = getsring(void);//q = getstring(void);


----------------解决方案--------------------------------------------------------

那个是不要用void,但还是无法得出正确结果
去运行一下就发现了


----------------解决方案--------------------------------------------------------
新手吗.没什么奇怪的.
----------------解决方案--------------------------------------------------------
算了,我不说了,我发最先后一次。就算我把那些笔误全改过来也不行
我当初是发快了点,有些错误。

我只是希望大家实际运行测试一下。
----------------解决方案--------------------------------------------------------
如果改过来了之后真的没有问题了呀1
----------------解决方案--------------------------------------------------------

没人说你怎么样的,运行这个试试

程序代码:
#include <stdio.h>

char *getstring(void)
{
char *p = \"aaaaaaaa\";
return p;
}
void main(void)
{
char *q=NULL;
q=getstring();
printf(\"%s\",q);
}


----------------解决方案--------------------------------------------------------
对于早期的编译器,char *p = "aaaaaaaa";这个字符串当成局部变量.

如果p指的内容可变,比如*(p+1)的值可以改变,那么这个串就存在栈上,

如果p指的内容不可变,那么就存储在静态存储区.

[此贴子已经被作者于2006-10-12 21:31:28编辑过]


----------------解决方案--------------------------------------------------------
char *getstring(void)
{
char *p = "aaaaaaaa";
return p;
}
void main(void)
{
char *q=NULL;//这个初始化可以不要,但最好写.
q=getstring();
printf("%s",q);
}
的确没有错.我用win-tc,c-free,vc编译器试过了.
----------------解决方案--------------------------------------------------------


#include <stdio.h>

char *getstring(void)
{
char *p = "aaaaaaaa";
printf("%s",p);
printf("%s",p+1);
return p;
}
void main(void)
{
char *q=NULL;
q=getstring();
getch();
printf("%s",q);
}
楼上的说对了,在加入以上两条语句printf(),跟getch()后发现*(p+1)的值可以改变,或许真的是在存在栈上
而不是在静态存储区。如果是这样,那么这程序肯定是错的了,
我用的是win-tc环境。
这个问题在林锐的那个《C/C++高质量编程》有解说。即使是在静态存储区也会有问题,但我没看明白。


----------------解决方案--------------------------------------------------------
  相关解决方案