前言
很多时候,pc控制下位机,都是通过串口或web,多以ascii码直接通信。在数据较少时,可直接申请一个缓冲区,发送所需数据;但是在很多时候,发送的数据会非常大,直接申请一个非常大的缓冲区并不是一个好的方法。因此可以申请一个小的缓冲区,然后把各个ascii字符串的首地址复制到该缓冲区中,然后发送时,循环读取这个缓冲区的地址内容,发送ascii码字符串。
一,实现
点击(此处)折叠或打开
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char *s1 = "hello world\n";
- char *s2 = "wo shi zhong guo ren\n";
- char *s3 = "i am a chinese\n";
- void *data = NULL;
- void init_data(void)
- {
- char **ptr = ((char**)data);
-
- (*ptr) = s1;
- printf("1 %p,%p,%s\n",ptr,s1,*ptr);
- ++ptr;
-
- (*ptr) = s2;
- printf("2 %p,%p,%s\n",ptr,s2,*ptr);
- ++ptr;
-
- (*ptr) = s3;
- printf("3 %p,%p,%s\n",ptr,s3,*ptr);
- ++ptr;
-
- ptr = NULL;
- printf("data1 %x\n",*(int*)data);
-
- }
- void show_data(void)
- {
- char **ptr = (char**)data;
- while((*ptr) != NULL)
- {
- printf("%s\n",*ptr);
- ++ptr;
- }
- }
- int main(void)
- {
- data = malloc(256);
- memset(data,0,256);
- printf("alloc success\n");
-
- init_data();
- printf("init success\n");
- show_data();
- free(data);
- printf("free success\n");
-
- return 0;
- }
二,结果