首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-11 
这个程序哪里有问题?看了半天,不知道哪里有问题,悲哀~~~C/C++ codechar *test(const char s[]){char tstr[

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

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];    }    return tstr;}



[解决办法]
char tstr[50]={'\0'};
你返回了一个局部地址
改成
C/C++ code
char *tstr = calloc(strlen(s),sizeof(char));
[解决办法]
没仔细看- -

原来还有问题

返回的tstr是局部变量


char tstr[50]={'\0'};
改成
char *tstr = NULL;
tstr = malloc(sizeof(char) * 50);
memset(tstr, '\0', sizeof(char) * 50);

[解决办法]
哈哈,被我找到了。你把那个char tstr[50]声明为全局变量就可以了,前面加上static就可以了。原来的是在栈上申请的一段空间,函数调用结束就被释放掉了,所以不能传进去。
[解决办法]
探讨

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

C/C++ code

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



为啥要这样用?

[解决办法]
探讨

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

C/C++ code

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



为啥要这样用?

[解决办法]
探讨
麻烦大家来帮我看看~~~
为什么数组变量声明了后可以用来直接存储数据,而链表却还要开辟空间?

[解决办法]
探讨
引用:
引用:
麻烦大家来帮我看看~~~
为什么数组变量声明了后可以用来直接存储数据,而链表却还要开辟空间?


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


但它还不是局部变量~

[解决办法]
指针和指针指向的地址是2个东西

不要混为一谈

你只是给指针分配了空间

指针指向的地址都没分配空间
[解决办法]
lz~~~ 加油呀!
[解决办法]
我汗,楼主把那个数组定义成全局的吧.就OK了!
[解决办法]
还有这个:
C/C++ code
if(s[i]!='')
[解决办法]
探讨
在java里面,如果实例化一个对象,对象的引用存放在堆栈中,而对象是存储在堆中,这个我是可以理解的~~
在http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html这篇文中,大家看我的理解有没有错哈~

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

[解决办法]
探讨
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……

[解决办法]
永远不要返回局部非静态变量的指针或引用
[解决办法]
没什么好悲哀的吧。。。我以前比你还菜呢。。

[解决办法]


在java里面,如果实例化一个对象,对象的引用存放在堆栈中,而对象是存储在堆中,这个我是可以理解的~~
在http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html这篇文中,大家看我的理解有没有错哈~

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

而在create函数中,是在自由存储区开辟的内存,由程序员声明动态生成,如果程序员没用进行free,那么它一直都会存在,p、q是指针,通过malloc函数为其分配了堆,如果程序员不delete,那么它会一直存在到程序结束~~~~~

[解决办法]
建议楼主看一下c陷阱与缺陷一书里3.2章节<非数组的指针>,里面有个例子可以解惑.
[解决办法]
学习ing,和楼主一样的菜鸟飘过。。。。。

热点排行