| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1650 人关注过本帖
标题:代码是实现 strdup 函数功能的,但是有个错误,写得太渣,求指教
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
malloc()是在堆上申请的内存空间,返回那块堆内存的起始地址,return是通过复制值返回的,即复制返回指针值到调用处,而函数随后释放掉那个指针,并不影响值已被复制保存起来,堆内存地址没有丢失,这种返回堆指针的用法是很常见的,唯一的问题,是本地C/C++代码要求程序员自己记得这个指针是指向堆的,在必要时自己释放,但实际上程序员经常会遗忘,这才是指针噩梦的真正根源。

授人以渔,不授人以鱼。
2014-08-22 10:20
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 10 楼 TonyDeng
已解决

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-22 10:44
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* _sF(char* s, int len)
 {
char* F = (char*)malloc(sizeof(char) * len);
for(int i = 0; i < len; i++)
 {
     F[i] = s[i];
 }
 F[len] = '\0';
return F;
 }
int main()
 {
     char *s="hello";
     char *d;
     d=_sF(s,strlen(s));
     printf("%s",d);
     free(d);
     return 0;
 }
改后的代码,谢谢大家的解答

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-22 10:45
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用l3456在2014-8-22 10:45:12的发言:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* _sF(char* s, int len)
 {
char* F = (char*)malloc(sizeof(char) * len);
for(int i = 0; i < len; i++)
 {
     F = s;
 }
 F[len] = '\0';
return F;
 }
int main()
 {
     char *s="hello";
     char *d;
     d=_sF(s,strlen(s));
     printf("%s",d);
     free(d);
     return 0;
 }
改后的代码,谢谢大家的解答


编写字符串函数  尽量不引用string。h 这个头文件

DO IT YOURSELF !
2014-08-22 10:52
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 14 楼 wp231957
可是我用了strlen,必须写头文件吧

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-22 10:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用l3456在2014-8-22 10:58:47的发言:

可是我用了strlen,必须写头文件吧

当然是所有字符串相关函数都自己实现  否则 string。h里基本啥函数都有  你既然引用了  还自己实现干嘛

DO IT YOURSELF !
2014-08-22 11:00
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 16 楼 wp231957
哦哦好的

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-22 11:04
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 11 楼 TonyDeng
请记住T版这段话,谁malloc谁free,尽量避免在函数里申请内存,函数外面释放内存。

总有那身价贱的人给作业贴回复完整的代码
2014-08-22 11:04
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 11 楼 TonyDeng
那就是 return F;free(F);?对吗

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-22 11:29
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 18 楼 embed_xuel

#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 char* _sF(char* s, int len)
 {
 char* F = (char*)malloc(sizeof(char) * len);
 for(int i = 0; i < len; i++)
 {
      F = s;
 }
 F[len] = '\0';
 return F;
 free(F);//函数内释放?
 }
 int main()
 {
      char *s="hello";
      char *d;
      d=_sF(s,strlen(s));
      printf("%s",d);
      return 0;
 }

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-22 11:30
快速回复:代码是实现 strdup 函数功能的,但是有个错误,写得太渣,求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013586 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved