将char数组的浓度和数量集中到C中的单个char数组中

时间:2015-02-25 13:19:28

标签: c arrays merge char printf

我试图将很多char数组合并为一个。 我的任务是将float数组更改为char数组,以通过TCP / IP套接字作为一行数据发送,所以我想使用 sprintf 将float数组值打印到char数组中,然后将这些数组合并到一个char数组中,我写了一点算法,但数据不会形成一行数据并覆盖最后一个输入,我在做什么错误?这是代码:

#include  <stdio.h>
#include <iostream>

/*
 * Mock data loop - a loop where data is created
 * String loop - a loop where a single word is merged into a sentance
 * Formating loop - a loop where floats are converted into char arrays
 !!! - The place where things go wrong (I think)
*/

using namespace std;

int main(){

    float data[5];                      // Mock data array
    char tmp[10];                       // Temprorary array, where a word (flaot value) is stored
    char text[256];                     // String array, where words are stored into a single sentance
    int n=5;                            // Size of mock data
    int i, j, k;                        // Loop counters

    // Mock data loop
    for (i = 0; i < n; i++){
        data[i] = float(i);
        printf("Data: %f \n", data[i]);
    }

    printf("------------------------- \n");
/////////////////////////////////////////////////////////////////////// !!!
    for (i = 0; i < 256; i++){                  // String loop
        for(j = 0; j < n; j++){                 // Mock data loop
            for (k = 0; k < 10; k++){           // Formating loop
                sprintf(tmp, "%f", data[j]);
                printf("Sprintf: %s \n", tmp);
                text[i + k] = tmp[k];
            }
        }
        printf("Text %d : %s \n", i, text);
        i = i + 9;
        }
/////////////////////////////////////////////////////////////////////// !!!
    printf("------------------------- \n");
    printf("Text: %s \n", text);

    std::cin.get();
    return 0;
}

感谢帮助,伙计们!

P.S。我正在尝试来使用任何C ++函数,因为我正在使用微控制器,这段代码是用MS Visual 2013编写的,所以我使用 #include std :: cin.get(); 停止控制台并查看结果。

1 个答案:

答案 0 :(得分:0)

据我所知,您的代码可以为每个浮点值保留10行(您i++,还有i += 9)。如果浮点数的字符串表示需要更多位置怎么办?您的tmp会溢出,您的点票将会关闭。

这是一次不使用10个职位的尝试,但也是必要的。在接收方,你必须用空格和sscanf()分开以获得浮动。该代码还检查缓冲区溢出。我希望我能正确理解你的问题,这有助于......

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    float data[5];              /* Mock data */
    char text[256];             /* Line of data */
    int i;

    /* Build up mock data */
    for (i = 0; i < 5; i++)
        data[i] = i * 3 + 3.1415729;

    /* Stuff int text */
    text[0] = 0;
    for (i = 0; i < 5; i++) {
        char tmp[100];          /* Conversion buffer, should be large enough */
        if (snprintf(tmp, sizeof(tmp), "%f ", data[i]) >= sizeof(tmp)) {
            fprintf(stderr, "conversion buffer overflow\n");
            exit(1);
        }
        if (strlen(text) + strlen(tmp) >= sizeof(text)) {
            fprintf(stderr, "text buffer overflow\n");
            exit(1);
        }
        strcat(text, tmp);
    }

    printf("Built up text: %s\n", text);

    return 0;
}