如何使结构数组成为单个字符串?

时间:2022-01-03 21:15:48

I'm having a tough time figuring out how to get this structure array to appear as a single string "c_str" when I use the printf function. As of now I only can only get c_str to be one part of the line structure array, in this case the 24th line. When I use print(c_str); i would like the output to display all of the data that is in the code. It needs to be stored as a string because I have a function that needs to access n,m,gnm,hnm,dgnm, and dhnm.

当我使用printf函数时,我很难弄清楚如何让这个结构数组作为一个字符串“c_str”出现。现在我只能让c_str成为行结构数组的一部分,在这个例子中是第24行。当我使用打印(c_str);我希望输出显示代码中所有的数据。它需要被存储为一个字符串,因为我有一个函数需要访问n、m、gnm、hnm、dgnm和dhnm。

Thank you for the help

谢谢你的帮助。

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

int main()
{ 
int i=0,n[90],m[90];
float gnm[90],hnm[90],dgnm[90],dhnm[90];
static char c_str[90];

      struct wmm
   {
    int   n;
    int   m;
    float gnm;
    float hnm;
    float dgnm;
    float dhnm;
   }  book[90]= {{1, 0,  -29496.6,       0.0,       11.6,       0.0},
  {1, 1,   -1586.3,    4944.4,       16.5,     -25.9},
  {2, 0,   -2396.6,       0.0,      -12.1,       0.0},
  {2, 1,    3026.1,   -2707.7,       -4.4,     -22.5},
  {2, 2,    1668.6,    -576.1,        1.9,     -11.8},
  {3, 0,    1340.1,       0.0,        0.4,       0.0},
  {3, 1,   -2326.2,    -160.2,       -4.1,       7.3},
  {3, 2,    1231.9,     251.9,       -2.9,      -3.9},
  {3, 3,    634.0,     -536.6,       -7.7,      -2.6},
  {4, 0,    912.6,        0.0,       -1.8,       0.0},
  {4, 1,    808.9,      286.4,        2.3,       1.1},
  {4, 2,    166.7,     -211.2,       -8.7,       2.7},
  {4, 3,   -357.1,      164.3,        4.6,       3.9},
  {4, 4,     89.4,     -309.1,       -2.1,      -0.8},
  {5, 0,   -230.9,        0.0,       -1.0,       0.0},
  {5, 1,    357.2,       44.6,        0.6,       0.4},
  {5, 2,    200.3,      188.9,       -1.8,       1.8},
  {5, 3,   -141.1,     -118.2,       -1.0,       1.2},
  {5, 4,   -163.0,        0.0,        0.9,       4.0},
  {5, 5,     -7.8,      100.9,        1.0,      -0.6},
  {6, 0,     72.8,        0.0,       -0.2,       0.0},
  {6, 1,     68.6,      -20.8,       -0.2,      -0.2},
  {6, 2,     76.0,       44.1,       -0.1,      -2.1},
  {6, 3,   -141.4,      61.5 ,        2.0,      -0.4},
  {6, 4,    -22.8,      -66.3,       -1.7,      -0.6},
  {6, 5,     13.2,        3.1,       -0.3,       0.5},
  {6, 6,    -77.9,       55.0,        1.7,       0.9},
  {7,  0,      80.5,       0.0,        0.1,        0.0},
  {7,  1,     -75.1,     -57.9,       -0.1,        0.7},
  {7,  2,      -4.7,     -21.1,       -0.6,        0.3},
  {7,  3,      45.3,       6.5,        1.3,       -0.1},
  {7,  4,      13.9,      24.9,        0.4,       -0.1},
  {7,  5,      10.4,       7.0,        0.3,       -0.8},
  {7,  6,       1.7,     -27.7,       -0.7,       -0.3},
  {7,  7,       4.9,      -3.3,        0.6,        0.3},
  {8,  0,      24.4,       0.0,       -0.1,        0.0},
  {8,  1,       8.1,      11.0,        0.1,       -0.1},
  {8,  2,     -14.5,     -20.0,       -0.6,        0.2},
  {8,  3,      -5.6,      11.9,        0.2,        0.4},
  {8,  4,     -19.3,     -17.4,       -0.2,        0.4},
  {8,  5,      11.5,      16.7,        0.3,        0.1},
  {8,  6,      10.9,       7.0,        0.3,       -0.1},
  {8,  7,     -14.1,     -10.8,       -0.6,        0.4},
  {8,  8,      -3.7,       1.7,        0.2,        0.3},
  {9,  0,       5.4,       0.0,        0.0,        0.0},
  {9,  1,       9.4,     -20.5,       -0.1,        0.0},
  {9,  2,       3.4,      11.5,        0.0,       -0.2},
  {9,  3,      -5.2,      12.8,        0.3,        0.0},
  {9,  4,       3.1,      -7.2,       -0.4,       -0.1},
  {9,  5,     -12.4,      -7.4,       -0.3,        0.1},
  {9,  6,      -0.7,       8.0,        0.1,        0.0},
  {9,  7,       8.4,       2.1,       -0.1,       -0.2},
  {9,  8,      -8.5,      -6.1,       -0.4,        0.3},
  {9,  9,     -10.1,       7.0,       -0.2,        0.2},
  {10,  0,      -2.0,       0.0,        0.0,        0.0},
  {10,  1,      -6.3,       2.8,        0.0,        0.1},
  {10, 2 ,      0.9 ,     -0.1 ,      -0.1 ,      -0.1},
  {10,  3,      -1.1,       4.7,        0.2,        0.0},
  {10,  4,      -0.2,       4.4,        0.0,       -0.1},
  {10,  5,       2.5,      -7.2,       -0.1,       -0.1},
  {10,  6,      -0.3,     -1.0 ,      -0.2 ,       0.0},
  {10,  7,       2.2,      -3.9,        0.0,       -0.1},
  {10,  8,       3.1,      -2.0,       -0.1,       -0.2},
  {10,  9,      -1.0,      -2.0,       -0.2,        0.0},
  {10, 10,      -2.8,      -8.3,       -0.2,       -0.1},
  {11,  0,       3.0,       0.0,        0.0,        0.0},
  {11,  1,      -1.5,       0.2,        0.0,        0.0},
  {11,  2,      -2.1,       1.7,        0.0,        0.1},
  {11,  3,       1.7,      -0.6,        0.1,        0.0},
  {11,  4,      -0.5,      -1.8,        0.0,        0.1},
  {11,  5,       0.5,       0.9,        0.0,        0.0},
  {11,  6,      -0.8,      -0.4,        0.0,        0.1},
  {11,  7,       0.4,      -2.5,        0.0,        0.0},
  {11,  8,       1.8,      -1.3,        0.0,       -0.1},
  {11,  9,       0.1,      -2.1,        0.0,       -0.1},
  {11, 10,       0.7,      -1.9,       -0.1,        0.0},
  {11, 11,       3.8,      -1.8,        0.0,       -0.1},
  {12,  0,      -2.2,       0.0,        0.0,        0.0},
  {12,  1,      -0.2,      -0.9,        0.0,        0.0},
  {12,  2,       0.3,       0.3,        0.1,        0.0},
  {12,  3,      1.0 ,      2.1 ,       0.1 ,       0.0},
  {12,  4,      -0.6,      -2.5,       -0.1,        0.0},
  {12,  5,       0.9,       0.5,        0.0,        0.0},
  {12,  6,      -0.1,       0.6,        0.0,        0.1},
  {12,  7,       0.5,       0.0,        0.0,        0.0},
  {12,  8,      -0.4,       0.1,        0.0,        0.0},
  {12,  9,      -0.4,       0.3,        0.0,        0.0},
  {12, 10,       0.2,      -0.9,        0.0,        0.0},
  {12, 11,      -0.8,      -0.2,       -0.1,        0.0},
  {12, 12,       0.0,       0.9,        0.1,        0.0}};


 sprintf(c_str, " %d %d %lf %lf %lf %lf" ,book[25].n, book[25].m , book[25].gnm , book[25].hnm, book[25].dgnm, book[25].dhnm); 

   getchar();
   return 0;

 }

1 个解决方案

#1


2  

If you are trying to copy all of the data in the struct into c_str, you only need to wrap sprintf() in a loop. Note that you should really switch to snprintf() to avoid accidentally introducing a buffer-overflow.

如果您试图将struct中的所有数据复制到c_str,那么只需将sprintf()包装在一个循环中即可。注意,您应该真正切换到snprintf(),以避免意外地引入缓冲区溢出。

Since sprintf() and snprintf() return the number of character that they add to the string, you can easily keep track of the next unused location in the string:

由于sprintf()和snprintf()返回它们添加到字符串中的字符数量,您可以轻松地跟踪字符串中下一个未使用的位置:

int i, n = 90, buf_size = 90, offset = 0;
for (i = 0; i < n && offset < buf_size; ++i) {
     offset += snprintf(c_str + offset, buf_size - offset, " %d %d %lf %lf %lf %lf", book[i].n, book[i].m , book[i].gnm , book[i].hnm, book[i].dgnm, book[i].dhnm);
}

If you were to repeatedly pass c_str as the first argument, it would only contain the last line.

如果您要重复地将c_str作为第一个参数,那么它只包含最后一行。

#1


2  

If you are trying to copy all of the data in the struct into c_str, you only need to wrap sprintf() in a loop. Note that you should really switch to snprintf() to avoid accidentally introducing a buffer-overflow.

如果您试图将struct中的所有数据复制到c_str,那么只需将sprintf()包装在一个循环中即可。注意,您应该真正切换到snprintf(),以避免意外地引入缓冲区溢出。

Since sprintf() and snprintf() return the number of character that they add to the string, you can easily keep track of the next unused location in the string:

由于sprintf()和snprintf()返回它们添加到字符串中的字符数量,您可以轻松地跟踪字符串中下一个未使用的位置:

int i, n = 90, buf_size = 90, offset = 0;
for (i = 0; i < n && offset < buf_size; ++i) {
     offset += snprintf(c_str + offset, buf_size - offset, " %d %d %lf %lf %lf %lf", book[i].n, book[i].m , book[i].gnm , book[i].hnm, book[i].dgnm, book[i].dhnm);
}

If you were to repeatedly pass c_str as the first argument, it would only contain the last line.

如果您要重复地将c_str作为第一个参数,那么它只包含最后一行。