Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28354
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2018-04-16 10:56
个人简介

hello world

文章分类

全部博文(8)

文章存档

2019年(3)

2018年(5)

我的朋友

分类: C/C++

2019-04-24 14:20:10

操作系统: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. }


二,结果











    
阅读(1666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~