免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2538 | 回复: 11
打印 上一主题 下一主题

代码里的result前乱码是什么原因造成的,怎么去掉 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-17 17:05 |只看该作者 |倒序浏览
本帖最后由 daodaohu123 于 2012-05-17 18:52 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char ** str_part(char *str, char *delim)
  5. {
  6.         char *s = str;
  7.         char *d = delim;
  8.         int n = 0;

  9.         char **p = (char **)malloc(100 * sizeof(char *));

  10.         while((p[n] = strtok(s, d)) != NULL){
  11.                 n++;
  12.                 s = NULL;
  13.         }

  14.         return p;
  15. }

  16. int find_cmp(char **str_group, char *string)
  17. {
  18.         int ret = 0;
  19.         int n = 0;
  20.         int location = -1;
  21.         char *str = string;
  22.         int len = strlen(str);
  23.         char **str_g = str_group;

  24.         while(str_g[n] != NULL){
  25.                 ret = strncmp(str_g[n], str, len);
  26.                 if(ret == 0) location = n;
  27.                 n++;
  28.         }
  29.         return location;
  30. }

  31. char **replace_cmp(char **str_group, int num, char *string)
  32. {
  33.         char** str_g = str_group;
  34.         int n = 0;
  35.         strcpy(str_g[num], string);
  36. //      strcat(str_g[num], "\0");      
  37.         return str_g;
  38. }

  39. char *rewrite(char **str_group)
  40. {
  41.         char **str_g = str_group;
  42.         int n = 0;
  43.         int len = 0;
  44.         char *string = (char *)malloc(100 * sizeof(char));
  45.         while(str_g[n] != NULL){
  46.                 len = strlen(str_g[n]);
  47.                 strncat(string, str_g[n], len);
  48.                 strcat(string, " ");
  49.                 n++;
  50.         }
  51.         strcat(string, "\n");

  52.         return string;
  53. }

  54. char *extract_str_from_file(char *file, char *keyword)
  55. {
  56.         FILE *fp;
  57.         char *string = (char *)malloc(100 * sizeof(char));
  58.         char *str = (char *)malloc(100 * sizeof(char));
  59.         fp = fopen(file, "r");
  60.         char **p;
  61.                 while(fgets(string, 1024, fp) != NULL ){
  62.                         int ret = -1;
  63.                         strcpy(str, string);
  64.                         p = str_part(string, " ");

  65.                         ret = find_cmp(p, keyword);
  66.                         if(ret >= 0){
  67.                         printf("content of line is :%s", str);
  68.                         printf("ret is %d \n", ret);
  69.                         fclose(fp);
  70.                         return str;
  71.                         }

  72.                 }
  73.         printf("nothing");
  74.         return "nothing";
  75. }

  76. int newfile_rewrite(char * oldfile, char *newfile, char *cmpcontent, char *repcontent)
  77. {
  78.         char str[1024];
  79.         FILE *fp;
  80.         FILE *dest;
  81.         fp = fopen(oldfile, "r");
  82.         dest = fopen(newfile, "a+");
  83.         while(!feof(fp))
  84.         {
  85.                 if(fgets(str, 1024, fp) != NULL){
  86.                         if(strcmp(str, cmpcontent)){
  87.                                 fputs(str, dest);
  88.                         }
  89.                         else{
  90.                                 fputs(repcontent, dest);
  91.                         }
  92.                 }
  93.         }
  94.         fclose(fp);
  95.         fclose(dest);
  96.         return 0;
  97. }

  98. int main(int argc, char **argv)
  99. {
  100.         int n = 0;
  101.         int location;
  102.         char replace_str[]="god";
  103.         char **str_cmp = (char **)malloc(100 * sizeof(char*));
  104.         char *string = malloc(100 * sizeof(char));
  105.         char *delim = " ";
  106.         char **p;

  107.         char *dd = (char *)malloc(100 * sizeof(char));
  108.         string = extract_str_from_file("dd", "me");
  109.         strcpy(dd, string);
  110.         p = str_part(string, delim);

  111.         location = find_cmp(p, "hud");

  112.         replace_cmp(p, location, replace_str);
  113.         str_cmp = replace_cmp(p, location, replace_str);

  114.         char *result = rewrite(str_cmp);
  115.         printf("result is :%s", result);
  116.         printf("dd is :%s", dd);
  117.         newfile_rewrite("dd", "dd_file", dd, result);
  118.         return 0;
  119. }


复制代码

论坛徽章:
0
2 [报告]
发表于 2012-05-17 17:45 |只看该作者
        char **str_g = (char **)malloc(100 * sizeof(char *));
        str_g = str_group;
不小心看到这我就决定放弃了。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2012-05-17 17:45 |只看该作者
代码好长呀,估计很少有人愿意看一遍,要不你直接说说看你想实现什么功能

论坛徽章:
0
4
发表于 2012-05-17 17:47
回复 3# bruceteen


    result输出时前面有些乱码,影响我将数据导入文件 不知道怎么去掉,或是那里错误造成的

论坛徽章:
0
5 [报告]
发表于 2012-05-17 17:47 |只看该作者
回复 2# draytek58


    写的不好 能告诉下正确格式或写法怎么写吗 谢谢

论坛徽章:
0
6 [报告]
发表于 2012-05-17 17:48 |只看该作者
回复 3# bruceteen


    调用rewrite之前数据是正常的

论坛徽章:
0
7 [报告]
发表于 2012-05-17 17:59 |只看该作者
回复 5# daodaohu123


    你还没看出那句有问题吗?
malloc 申请了内存,地址存在变量里,然后你又写了变量,memory leak。。
还发现问题不少,比如
        strcpy(str_g[num], string);
        strcat(str_g[num], "\0");
strcpy会拷贝原字符串最后的 '\0' 的,不用后面那句strcat(str_g[num], "\0")。

乱码肯定就是你申请了内存,但是写在了其它地方。读的时候也不知道你读的哪的。
PS. 我没看你代码

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
8 [报告]
发表于 2012-05-17 18:07 |只看该作者
一贯写臭代码的菜鸟都觉得, 这代码太臭了。。。

论坛徽章:
0
9 [报告]
发表于 2012-05-17 18:11 |只看该作者
回复 8# 帅绝人寰


    我的代码自己觉得也很烂, 麻烦你告诉下怎么改 谢谢了

论坛徽章:
0
10 [报告]
发表于 2012-05-17 18:12 |只看该作者
回复 7# draytek58


    我回去 在看看指针这 谢谢你的回答
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP