这个程序哪里有问题?看了半天,不知道哪里有问题,悲哀~~~
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 = 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就可以了。原来的是在栈上申请的一段空间,函数调用结束就被释放掉了,所以不能传进去。
[解决办法]
if(s[i]!='')
[解决办法]
在java里面,如果实例化一个对象,对象的引用存放在堆栈中,而对象是存储在堆中,这个我是可以理解的~~
在http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html这篇文中,大家看我的理解有没有错哈~
在系统内存中,内存被分成不同性质的存储区,堆、栈、自由存储区、存放全局或静态变量的存储区、常量存储区,系统会根据用户声明的变量类型来分配存储空间~~~
当我们定义一个数组变量 char s[]时,如果没有为它分配内存,那么编译器会自动的为其分配栈存储区,当操作完成后,又自动的将内存给释放掉,比如题目中的,在进行return返回前,已经将tstr变量给释放了
而在create函数中,是在自由存储区开辟的内存,由程序员声明动态生成,如果程序员没用进行free,那么它一直都会存在,p、q是指针,通过malloc函数为其分配了堆,如果程序员不delete,那么它会一直存在到程序结束~~~~~
[解决办法]
建议楼主看一下c陷阱与缺陷一书里3.2章节<非数组的指针>,里面有个例子可以解惑.
[解决办法]
学习ing,和楼主一样的菜鸟飘过。。。。。