免费注册 查看新帖 |

Chinaunix

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

代码里的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:47 |显示全部楼层
回复 2# draytek58


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

论坛徽章:
0
3 [报告]
发表于 2012-05-17 17:48 |显示全部楼层
回复 3# bruceteen


    调用rewrite之前数据是正常的

论坛徽章:
0
4 [报告]
发表于 2012-05-17 18:11 |显示全部楼层
回复 8# 帅绝人寰


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

论坛徽章:
0
5 [报告]
发表于 2012-05-17 18:12 |显示全部楼层
回复 7# draytek58


    我回去 在看看指针这 谢谢你的回答

论坛徽章:
0
6 [报告]
发表于 2012-05-17 18:17 |显示全部楼层
回复 3# bruceteen


    只是想写一个从某个文件里提取某一行(比如这行有/dev/md, 将该行的spare-group=spare替换成spare-group=mdsparedisks
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP