1

我编写了以下函数,它从外部设备读取缓冲区(我已经用另一个函数打开了串行端口)。我有这个 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);

你有什么建议我?

4

2 回答 2

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
于 2013-05-29T09:21:39.880 回答
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 */
于 2013-05-29T09:49:34.057 回答