Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6457243
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16635
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: C/C++

2014-06-10 14:03:36

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


二,结果











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

andyhzw2014-06-12 08:58:24

david_1234:实现过程中的12行是否有点复杂,不需要对地址更改就不需要将data强制转换为地址的地址吧?

真正的含义是把data转换为 char *data[],即数组指针。否则会有类型问题。

回复 | 举报

david_12342014-06-11 23:56:16

实现过程中的12行是否有点复杂,不需要对地址更改就不需要将data强制转换为地址的地址吧?

andyhzw2014-06-11 09:58:39

init_data 中的 ptr = NULL; -> (*ptr) = NULL;