我试图将很多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(); 停止控制台并查看结果。
答案 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;
}