这个程序哪里有问题?看了半天,不知道哪里有问题,悲哀~~~

AC903919 2010-04-25 07:44:42

char *test(const char s[])
{
char tstr[50]={'\0'};
unsigned int i,k=0;

for(i=0;i<strlen(s);i++)
{
if(s[i]!='')
tstr[k++]=s[i];
}
return tstr;
}

...全文
358 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ac903919 的回复:]
在java里面,如果实例化一个对象,对象的引用存放在堆栈中,而对象是存储在堆中,这个我是可以理解的~~
在http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html这篇文中,大家看我的理解有没有错哈~

在系统内存中,内存被分成不同性质的存储区,堆、栈、自由存储区、存放全局或静态变量的存储区、常量存储区,系统会根据用户声明的变量类型来分……
[/Quote]

差不多是这个意思
有两点注意一下
1. 当我们定义一个数组变量 char s[]时实际上已经分配内存了,不需要手动分配
2. p、q本省是局部变量,它们在栈里,但是它们的值是一个内存地址,这个地址指向了一块堆中new出来的内存
AC903919 2010-04-26
  • 打赏
  • 举报
回复
在java里面,如果实例化一个对象,对象的引用存放在堆栈中,而对象是存储在堆中,这个我是可以理解的~~
http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html这篇文中,大家看我的理解有没有错哈~

在系统内存中,内存被分成不同性质的存储区,堆、栈、自由存储区、存放全局或静态变量的存储区、常量存储区,系统会根据用户声明的变量类型来分配存储空间~~~
当我们定义一个数组变量 char s[]时,如果没有为它分配内存,那么编译器会自动的为其分配栈存储区,当操作完成后,又自动的将内存给释放掉,比如题目中的,在进行return返回前,已经将tstr变量给释放了

而在create函数中,是在自由存储区开辟的内存,由程序员声明动态生成,如果程序员没用进行free,那么它一直都会存在,p、q是指针,通过malloc函数为其分配了堆,如果程序员不delete,那么它会一直存在到程序结束~~~~~
we_sky2008 2010-04-26
  • 打赏
  • 举报
回复
还有这个:

if(s[i]!='')

''就相当于'\0'吗?
AC903919 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 traceless 的回复:]
lz~~~ 加油呀!
[/Quote]

呵呵,在加油呢~ 但是还要大家帮帮忙啊~~~
  • 打赏
  • 举报
回复
我汗,楼主把那个数组定义成全局的吧.就OK了!
traceless 2010-04-26
  • 打赏
  • 举报
回复
lz~~~ 加油呀!
localxiao 2010-04-26
  • 打赏
  • 举报
回复
指针和指针指向的地址是2个东西

不要混为一谈

你只是给指针分配了空间

指针指向的地址都没分配空间
向立天 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ac903919 的回复:]
引用 11 楼 xianglitian 的回复:
引用 10 楼 ac903919 的回复:
麻烦大家来帮我看看~~~
为什么数组变量声明了后可以用来直接存储数据,而链表却还要开辟空间?


studnode *p,*q; //指针变量
=========
这里你声明的是指针
所以要分配空间


但它还不是局部变量~
[/Quote]

这里有个问题
p,q是局部变量没有错
但是它们指向的空间是用new在堆中分配的
如果你不手动释放他是不会被释放的
你在任何位置都可以访问
如果你对这些不是很清楚可以看看这篇文章
http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html
AC903919 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xianglitian 的回复:]
引用 10 楼 ac903919 的回复:
麻烦大家来帮我看看~~~
为什么数组变量声明了后可以用来直接存储数据,而链表却还要开辟空间?


studnode *p,*q; //指针变量
=========
这里你声明的是指针
所以要分配空间
[/Quote]

但它还不是局部变量~
向立天 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ac903919 的回复:]
麻烦大家来帮我看看~~~
为什么数组变量声明了后可以用来直接存储数据,而链表却还要开辟空间?
[/Quote]

studnode *p,*q; //指针变量
=========
这里你声明的是指针
所以要分配空间
AC903919 2010-04-26
  • 打赏
  • 举报
回复
麻烦大家来帮我看看~~~
为什么数组变量声明了后可以用来直接存储数据,而链表却还要开辟空间?
零起跑线 2010-04-26
  • 打赏
  • 举报
回复
学习ing,和楼主一样的菜鸟飘过。。。。。
huanmie_09 2010-04-26
  • 打赏
  • 举报
回复
建议楼主看一下c陷阱与缺陷一书里3.2章节<非数组的指针>,里面有个例子可以解惑.
尹成 2010-04-26
  • 打赏
  • 举报
回复
在java里面,如果实例化一个对象,对象的引用存放在堆栈中,而对象是存储在堆中,这个我是可以理解的~~
在http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html这篇文中,大家看我的理解有没有错哈~

在系统内存中,内存被分成不同性质的存储区,堆、栈、自由存储区、存放全局或静态变量的存储区、常量存储区,系统会根据用户声明的变量类型来分配存储空间~~~
当我们定义一个数组变量 char s[]时,如果没有为它分配内存,那么编译器会自动的为其分配栈存储区,当操作完成后,又自动的将内存给释放掉,比如题目中的,在进行return返回前,已经将tstr变量给释放了

而在create函数中,是在自由存储区开辟的内存,由程序员声明动态生成,如果程序员没用进行free,那么它一直都会存在,p、q是指针,通过malloc函数为其分配了堆,如果程序员不delete,那么它会一直存在到程序结束~~~~~
zhangxfeng112 2010-04-26
  • 打赏
  • 举报
回复
没什么好悲哀的吧。。。我以前比你还菜呢。。
zhangxfeng112 2010-04-26
  • 打赏
  • 举报
回复
没什么好悲哀的吧。。。我以前比你还菜呢。。
zht_304 2010-04-26
  • 打赏
  • 举报
回复
永远不要返回局部非静态变量的指针或引用
SuperSparkGuo 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 ac903919 的回复:]
C/C++ code

char *test(const char s[])
{
char tstr[50]={'\0'};
unsigned int i,k=0;

for(i=0;i<strlen(s);i++)
{
if(s[i]!='')
tstr[k++]=s[i];
}
re……
[/Quote]

char tstr[50]={'\0'};
tstr 内存在栈上面
函数完了 就没了。。。
1、可以使用 malloc申请然后 return
2、再调用函数前的地方申请好,作为参数穿进去 如test(const char s[], char * abc)
然后 return abc可以

AC903919 2010-04-25
  • 打赏
  • 举报
回复

void Create(studnode *s)
{
studnode *p,*q; //指针变量
p=(studnode *)malloc(sizeof(studnode));
if(s==null)
{
s=p;
q=p;
q->front=s;
q->next=null;
}
else
{
q->next=p;
p->front=q;
q=p;
q->next=null;
}
p=null;
node++;
}


那这样一段代码要不要考虑 全局变量还是局部?s是一个双向链表的头指针,创建的新节点p能找到q的位置吗?
localxiao 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ac903919 的回复:]

引用 3 楼 kingteng 的回复:
char tstr[50]={'\0'};
你返回了一个局部地址
改成

C/C++ code

char *tstr = calloc(strlen(s),sizeof(char));



为啥要这样用?
[/Quote]

局部变量在函数调用结束以后自动销毁
加载更多回复(7)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧