我编写了以下函数,它从外部设备读取缓冲区(我用另一个函数打开了串口)。我有这个for循环,因为我想有不停的结果:
int get_data(int fd)
{
int n;
for (;;)
{
char buff[1000];
n=read(fd,buff,1000);
printf("%s\n\n", buff);
sleep(1);
memset(buff, 0, 1000);
}
}
缓冲区每10秒返回不同的结果,如下所示:
machine 1:vol=3.44V, str=10.2
machine 2:vol=3.23V, str=10.00
10秒后
machine 1:vol=3.24V, str=11.2
machine 1:vol=3.27V, str=11.4
等
我现在的问题是,如何在数组中保存所有的vol值,在第二个数组中保存str值?下一步是将这些数据从数组保存在mysql数据库中。我想用strncpy来复制新数组中的字符串,但我认为这不是一个好主意。例如:
char vol[10];
strncpy(vol, buff + 15, 4);
printf("%s\n", vol);
你有什么建议我的?
答案 0 :(得分:1)
这样的事情有用吗?它非常粗糙,但有点完成工作(或者至少它证明了strtok
的使用):
#include <stdio.h>
#include <string.h>
int main()
{
char string [] = "machine 1:vol=13.271V, str=11.41";
char buffer_a[25] = "";
char buffer_b[25] = "";
char* ptr;
ptr = strtok(string, " ,=Vvol:strmachine()");
int i = 0;
while (ptr != NULL)
{
ptr = strtok(NULL, " ,=Vvol:strmachine()");
if (i == 0)
strcat(buffer_a, ptr); // copies vol
if (i == 1)
strcat(buffer_b, ptr); // copies str
i++;
}
printf("%s\n", buffer_a);
printf("%s\n", buffer_b);
return 0;
}
输出是:
$ ./a.out
13.271
11.41
答案 1 :(得分:0)
以下代码解释了基本概念。
#include "stdlib.h"
float vol = 0, str = 0;
char * ptr = buf;
/* first vol */
ptr = strchr(ptr, '=');
if (NULL == ptr) {
/* error handling */
}
ptr++;
vol = strtof(ptr, &ptr);
/* next str */
ptr = strchr(ptr, '=');
if (NULL == ptr) {
/* error handling */
}
ptr++;
str = strtof(ptr, &ptr);
/* Now you can store vol & str to anywhere */