Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830524
  • 博文数量: 137
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1409
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(137)

文章存档

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2020-11-30 15:25:30

直接贴代码吧。

点击(此处)折叠或打开


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <sys/time.h>

  6. void add_str(char **str,int *size_t);
  7. void del_str(char **str, int point_t);
  8. void insert_str(char **str,const char *s,int point_t);

  9. void add_str ( char **str,int *size_t)
  10. {
  11.         int i;
  12.         for(i = 0 ; i < 11 ;i++ )
  13.         {
  14.                 str[i] = ( char *)malloc(sizeof(char)*11);
  15.                 snprintf(str[i],11,"%010d",i);
  16.         }
  17.         *size_t = i;
  18.         return;
  19. }


  20. void del_str ( char **str , int point_t )
  21. {
  22.         int i;
  23.         for ( i = point_t-1 ; str[i][0] != NULL && str[i+1][0] != NULL ; i++ )
  24.         {
  25.                 str[i] = (char *)realloc(str[i],sizeof(char)*strlen(str[i+1]));
  26.                 snprintf(str[i],strlen(str[i+1])+1,"%s",str[i+1]);
  27.         }
  28.         if ( str[i][0] != '\0' )
  29.                 str[i][0] = '\0';
  30. }

  31. void insert_str(char **str , const char *s , int point_t)
  32. {
  33.         int i;
  34.         int size = 0 ;
  35.         while(str[size][0] != NULL ) size++;
  36.         str[size] = (char *)malloc(sizeof(char)*strlen(str[size-1]));
  37.         for ( i = size ; i >point_t-1 && i >0 ; i-- )
  38.         {
  39.                 str[i] = (char *)realloc(str[i],sizeof(char)*strlen(str[i-1]));
  40.                 snprintf(str[i],strlen(str[i-1])+1,"%s",str[i-1]);
  41.         }

  42.         str[point_t-1] = (char *)realloc(str[point_t],sizeof(char)*strlen(s));
  43.         snprintf(str[point_t-1],strlen(s)+1,"%s",s);

  44. }


  45. int main ( void )
  46. {
  47.         int i;
  48.         int size;
  49.         char **str;

  50.         str = ( char **)malloc(sizeof(char));
  51.         add_str(str,&size);

  52.         printf(" === size == %d ==\n",size);

  53.         for ( i = 0 ; i < size ; i++)
  54.                 printf("i = %d , %s\n",i,str[i]);

  55.         puts("\n");

  56.         del_str(str,4);
  57.         for ( i = 0 ; i< size ; i++)
  58.                 printf("1 = %d , %s\n",i,str[i]);

  59.         puts("\n");
  60.         insert_str(str,"aaaaaaalksjdhfalkjsdhflksadhfaaa",5);
  61.         for ( i = 0 ; i <size ; i++)
  62.                 printf("2 = %d , %s\n",i,str[i]);

  63.         return 0;
  64. }

这一段程序演示了生成一个字符串数组,然后从字符串数组中删除指定行的一个简单操作。
其中 add_str 函数演示了如何生成一个字符串数组的完整过程,del_str 函数则演示了针对 add_str函数生成的字符串数组 char **str ,删除其中的第 4 行的操作。insert_str 用于对 add_str 函数生成的 char **str 的特定位置增加一行字符串。

重点需要注意的地方,在 main 函数中的:
str = ( char *)malloc(sizeof(char));
如果通过这句话提前作针对 char **str 的内存分配,则在 add_str 中对 **str 进行的赋值操作,在main 函数中将无法得到。
阅读(818) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~