操作系统:ubuntu10.04

前言
    很多时候,pc控制下位机,都是通过串口或web,多以ascii码直接通信。在数据较少时,可直接申请一个缓冲区,发送所需数据;但是在很多时候,发送的数据会非常大,直接申请一个非常大的缓冲区并不是一个好的方法。因此可以申请一个小的缓冲区,然后把各个ascii字符串的首地址复制到该缓冲区中,然后发送时,循环读取这个缓冲区的地址内容,发送ascii码字符串。

一,实现

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char    *s1 = "hello world\n";
  5. char    *s2 = "wo shi zhong guo ren\n";
  6. char    *s3 = "i am a chinese\n";
  7. void     *data = NULL;

  8. void    init_data(void)
  9. {
  10.     char **ptr = ((char**)data);
  11.     

  12.     (*ptr)     = s1;
  13.     printf("1 %p,%p,%s\n",ptr,s1,*ptr);
  14.     ++ptr;
  15.     
  16.     (*ptr)     = s2;
  17.     printf("2 %p,%p,%s\n",ptr,s2,*ptr);
  18.     ++ptr;
  19.     
  20.     (*ptr)     = s3;
  21.     printf("3 %p,%p,%s\n",ptr,s3,*ptr);
  22.     ++ptr;
  23.     
  24.     ptr        = NULL;

  25.     printf("data1 %x\n",*(int*)data);
  26.     
  27. }

  28. void     show_data(void)
  29. {
  30.     char **ptr = (char**)data;

  31.     while((*ptr) != NULL)
  32.     {
  33.         printf("%s\n",*ptr);
  34.         ++ptr;
  35.     }
  36. }    

  37. int main(void)
  38. {
  39.     data = malloc(256);
  40.     memset(data,0,256);
  41.     printf("alloc success\n");
  42.     
  43.     init_data();

  44.     printf("init success\n");

  45.     show_data();

  46.     free(data);
  47.     printf("free success\n");
  48.     
  49.     return 0;
  50. }


二,结果
linux下C语言实现动态分配的缓冲区保存多个ascii码字符串首地址-LMLPHP










    
09-04 21:25