c - 我怎样才能在c中printf

标签 c printf

如何在不使用两次 printf 调用的情况下正确进行打印?

char* second = "Second%d";
printf("First%d"second,1,2);

最佳答案

您向我们展示的代码在语法上无效,但我认为您想做一些具有相同效果的事情:

printf("First%dSecond%d", 1, 2);

如您所知,printf 的第一个参数是格式字符串。它不一定是字面意思;您可以按照自己喜欢的方式构建它。

这是一个例子:

#include <stdio.h>
#include <string.h>
int main(void)
{
    char *second = "Second%d";
    char format[100];
    strcpy(format, "First%d");
    strcat(format, second);

    printf(format, 1, 2);

    putchar('\n');
    return 0;
}

一些注意事项:

我在输出后添加了换行符。输出文本应该(几乎)总是以换行符结束。

我为格式字符串设置了 100 字节的任意大小。更一般地说,您可以声明

char *format;

并通过调用 malloc() 对其进行初始化,分配您实际需要的大小(并检查 malloc() 没有通过返回 null 来表示失败指针);然后您需要在完成后调用 free(format);

正如 templatetypedef 在评论中所说,如果格式字符串来自不受控制的源,这种情况可能存在潜在危险。

(或者您可以调用 printf 两次;这并不比调用一次贵多少。)

关于c - 我怎样才能在c中printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11146770/

相关文章:

c - 文件输入输出,用C读取多个文件

c - 可执行文件在编译机上运行,​​而不是在第二台机器上运行

c - snprintf : simple way to force . 作为基数?

c++ - Printf 和十六进制值

c++ - 内联汇编 - 使用 printf 以十进制显示寄存器?

c - 如何使 if 语句仅在输入字符时运行

c++ - 我可以在 Vista 和 Windows 7 下以用户模式获得对原始磁盘扇区的写访问权限吗?

c - udp sendto无法实时发送整个txt文件

c - 为什么 printf ("test");没有给出任何错误?

f# - 嵌套函数调用中的 printfn 未在控制台上打印任何内容