c - fputs 和 printf 问题

标签 c

我得到的代码如下:

char* writeSpace(int i)
{
 fputs("                              " + (30-i), stdout);
}

printf("#%i key: %s%svalue: %s%s value2: %s", id, key, writeSpace(10), value, writeSpace(8), value2);

我的输出应该是这样的:

#1 key: foo          value: bar        value2: foobar

但事实并非如此。它看起来像:

                      #1 key: foo(null)value: bar(null)value2: foobar(null)

我的代码有什么问题?

最佳答案

好吧,您要fput将所有这些空间发送到控制台,所以您首先要获取它们。

然后你输出所有其他的东西,所以你得到下一个。

也许您的意思是让 writeSpace 返回 C 风格的字符串,而不是将其打印到控制台。

但是一定要为它分配空间!由于内存缓冲区的所有权有点古怪,因此最好在函数的 之外分配空间。

void writeSpace(char* buf, int i) {
   fputs("                              " + (30-i), buf);
}

char spaceBuf1[30];
writeSpace(spaceBuf1, 10);

char spaceBuf2[30];
writeSpace(spaceBuf2, 8);

printf("#%i key: %s%svalue: %s%s value2: %s",
   id, key, spaceBuf1, value, spaceBuf2, value2);

并考虑使用 实际 C++ 功能,如 iostreams 和 std::string。这会容易得多:

std::cout << "#" << id << " "
          << " key: " << std::setw(30) << key
          << " value: " << std::setw(30) << value
          << " value2: " << value2;

我推荐these resources用于学习地道的 C++。

关于c - fputs 和 printf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640975/

相关文章:

c - 如何编写由用户空间函数调用的内核空间函数?

c++ - 以最佳方式从 system() 命令捕获标准输出

C:在接收到信号时停止执行并跳转到程序中的特定点

c - 用于对名称列表进行排序的 Perl 脚本,从 C 脚本传递的文件名,然后将排序后的列表传回

c - 如何根据数组的索引对数组进行排序?

c - 格式化输入数组 int

c - 在 Linux 上获取接口(interface)的 IP 地址

c - Ruby 中的有符号和无符号整数

c - 判断一个数是偶数还是奇数的程序。它说 'if' 之前没有先前的 'else'

c - 尝试理解 pthread_cond_signal()