将数据从外部设备保存到阵列

时间:2013-05-29 08:43:40

标签: c arrays

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

你有什么建议我的?

2 个答案:

答案 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 */