如何将两个printf的输出存储到c

时间:2019-05-20 16:22:17

标签: c

如何将多个命令的输出或代码块存储到单个变量中。我需要将其写入变量,以便可以在多个地方使用。

以下是一个伪程序,其中包含一个代码块(请参见注释),其中包含两个 printf语句,我需要将它们存储到单个变量中,以便以后使用

显示输出格式的示例代码

#include <stdio.h>

int main()
{

int c;

 // code block start here

char buffer[128];

for (c = 1; c <= 10; c++)
  {
     printf("%d",c+2);

     if(c%2){
             printf("%d\n",c+2);

        }

  }

//code block ends here


// store the whole output of above code block into variable

//send the data on socket  ---this is working ,but need the whole data into the variable
  return 0;
}

上面的程序结果

 -->./a.out
33
455
677
899
101111
12   

我试图使用snprintf将两个printf的输出存储到一个名为buffer的变量中,但是它会覆盖最后一个printf的数据。

#include <stdio.h>


int main()
{

int c;

 // code block start here

char buffer[128];

for (c = 1; c <= 10; c++)
  {
//      printf("%d",c+2);
                snprintf(buffer, sizeof(buffer), "%d", c+2);
      if(c%2){
//                printf("%d\n",c+2);
        snprintf(buffer, sizeof(buffer), "%d", c+2);
                }

  }

printf("buffer is %s\n",buffer);
//code block ends here


// store the whole output of above code block into variable

//send the data on socket  ---this is working ,but need the whole data into the variable
  return 0;
}

当前输出:

buffer is 12

所需的输出:

buffer is 33\n455\n677\n899\n101111\n12

1 个答案:

答案 0 :(得分:2)

到目前为止,您每次都使用最新的snprintf调用来覆盖缓冲区。

您需要考虑snprintf返回的最后写入的字节数。

示例:

int numBytes = 0;

for (c = 1; c <= 10; c++)
{
    numBytes += snprintf(buffer+numBytes, sizeof(buffer)-numBytes, "%d", c+2);
    if (c%2) {
        numBytes += snprintf(buffer+numBytes, sizeof(buffer)-numBets, "%d", c+2);
    }    
}