【C/C++】format 格式化方法使用技巧(代码实例,皆可运行)

这篇具有很好参考价值的文章主要介绍了【C/C++】format 格式化方法使用技巧(代码实例,皆可运行)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

printf

当使用__attribute__((format(printf, ...)))语法时,可以使用printf函数作为一个例子来说明它的作用。下面是一个简单的示例代码:

#include <stdio.h>

void my_printf(const char *format, ...) __attribute__((format(printf, 1, 2)));

void my_printf(const char *format, ...)
{
    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end(args);
}

int main()
{
    int num = 10;
    const char *str = "hello";
    my_printf("num = %d, str = %s\n", num, str);
    return 0;
}

在这个示例代码中,my_printf函数使用了__attribute__((format(printf, 1, 2)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。

main函数中,我们调用了my_printf函数,并传递了一个格式化字符串和两个参数。由于我们使用了__attribute__((format(printf, 1, 2)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(printf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。

sprintf

好的,下面再举一个例子。假设我们有一个函数my_sprintf,它的作用是将格式化字符串和参数写入一个缓冲区中。我们可以使用__attribute__((format(printf, ...)))语法来指定函数参数的格式,从而帮助编译器检查函数调用时传递的参数是否符合格式化字符串的要求。下面是一个示例代码:

#include <stdio.h>
#include <stdarg.h>

void my_sprintf(char *buf, const char *format, ...) __attribute__((format(printf, 2, 3)));

void my_sprintf(char *buf, const char *format, ...)
{
    va_list args;
    va_start(args, format);
    vsprintf(buf, format, args);
    va_end(args);
}

int main()
{
    char buf[100];
    int num = 10;
    const char *str = "hello";
    my_sprintf(buf, "num = %d, str = %s\n", num, str);
    printf("%s", buf);
    return 0;
}

在这个示例代码中,my_sprintf函数使用了__attribute__((format(printf, 2, 3)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。

main函数中,我们调用了my_sprintf函数,并传递了一个缓冲区、一个格式化字符串和两个参数。由于我们使用了__attribute__((format(printf, 2, 3)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(printf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。

snprintf

好的,下面再举一个例子。假设我们有一个函数my_snprintf,它的作用是将格式化字符串和参数写入一个缓冲区中,并限制写入的字符数。我们可以使用__attribute__((format(printf, ...)))语法来指定函数参数的格式,从而帮助编译器检查函数调用时传递的参数是否符合格式化字符串的要求。下面是一个示例代码:

#include <stdio.h>
#include <stdarg.h>

void my_snprintf(char *buf, size_t size, const char *format, ...) __attribute__((format(printf, 3, 4)));

void my_snprintf(char *buf, size_t size, const char *format, ...)
{
    va_list args;
    va_start(args, format);
    vsnprintf(buf, size, format, args);
    va_end(args);
}

int main()
{
    char buf[100];
    int num = 10;
    const char *str = "hello";
    my_snprintf(buf, sizeof(buf), "num = %d, str = %s\n", num, str);
    printf("%s", buf);
    return 0;
}

在这个示例代码中,my_snprintf函数使用了__attribute__((format(printf, 3, 4)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。

main函数中,我们调用了my_snprintf函数,并传递了一个缓冲区、缓冲区大小、一个格式化字符串和两个参数。由于我们使用了__attribute__((format(printf, 3, 4)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(printf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。

fprintf

好的,下面再举一个例子。假设我们有一个函数my_fprintf,它的作用是将格式化字符串和参数写入一个文件中。我们可以使用__attribute__((format(printf, ...)))语法来指定函数参数的格式,从而帮助编译器检查函数调用时传递的参数是否符合格式化字符串的要求。下面是一个示例代码:

#include <stdio.h>
#include <stdarg.h>

void my_fprintf(FILE *fp, const char *format, ...) __attribute__((format(printf, 2, 3)));

void my_fprintf(FILE *fp, const char *format, ...)
{
    va_list args;
    va_start(args, format);
    vfprintf(fp, format, args);
    va_end(args);
}

int main()
{
    int num = 10;
    const char *str = "hello";
    FILE *fp = fopen("output.txt", "w");
    my_fprintf(fp, "num = %d, str = %s\n", num, str);
    fclose(fp);
    return 0;
}

在这个示例代码中,my_fprintf函数使用了__attribute__((format(printf, 2, 3)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。

main函数中,我们调用了my_fprintf函数,并传递了一个文件指针、一个格式化字符串和两个参数。由于我们使用了__attribute__((format(printf, 2, 3)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(printf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。

vprintf

好的,下面再举一个例子。假设我们有一个函数my_vprintf,它的作用是将格式化字符串和参数写入标准输出中。我们可以使用__attribute__((format(printf, ...)))语法来指定函数参数的格式,从而帮助编译器检查函数调用时传递的参数是否符合格式化字符串的要求。下面是一个示例代码:

#include <stdio.h>
#include <stdarg.h>

void my_vprintf(const char *format, va_list args) __attribute__((format(printf, 1, 0)));

void my_vprintf(const char *format, va_list args)
{
    vprintf(format, args);
}

void my_printf(const char *format, ...) 
{
    va_list args;
    va_start(args, format);
    my_vprintf(format, args);
    va_end(args);
}

int main()
{
    int num = 10;
    const char *str = "hello";
    my_printf("num = %d, str = %s\n", num, str);
    return 0;
}

在这个示例代码中,我们定义了两个函数my_vprintfmy_printfmy_vprintf函数使用了__attribute__((format(printf, 1, 0)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。my_printf函数则是一个包装函数,它调用了my_vprintf函数,并使用可变参数列表来传递参数。

main函数中,我们调用了my_printf函数,并传递了一个格式化字符串和两个参数。由于我们使用了__attribute__((format(printf, 1, 0)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(printf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。

fopen

好的,下面再举一个例子。假设我们有一个函数my_fopen,它的作用是打开一个文件,并返回一个文件指针。我们可以使用__attribute__((format(printf, ...)))语法来指定函数参数的格式,从而帮助编译器检查函数调用时传递的参数是否符合格式化字符串的要求。下面是一个示例代码:

#include <stdio.h>
#include <stdarg.h>

FILE *my_fopen(const char *format, ...) __attribute__((format(printf, 1, 2)));

FILE *my_fopen(const char *format, ...)
{
    char filename[100];
    va_list args;
    va_start(args, format);
    vsnprintf(filename, sizeof(filename), format, args);
    va_end(args);
    return fopen(filename, "w");
}

int main()
{
    int num = 10;
    const char *str = "hello";
    FILE *fp = my_fopen("output_%d_%s.txt", num, str);
    fprintf(fp, "This is a test\n");
    fclose(fp);
    return 0;
}

在这个示例代码中,my_fopen函数使用了__attribute__((format(printf, 1, 2)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。在函数内部,我们使用vsnprintf函数来将格式化字符串和参数转换成一个文件名,并使用fopen函数打开这个文件。

main函数中,我们调用了my_fopen函数,并传递了一个格式化字符串和两个参数。由于我们使用了__attribute__((format(printf, 1, 2)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(printf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。

sscanf

好的,下面再举一个例子。假设我们有一个函数my_sscanf,它的作用是从一个字符串中读取格式化数据。我们可以使用__attribute__((format(scanf, ...)))语法来指定函数参数的格式,从而帮助编译器检查函数调用时传递的参数是否符合格式化字符串的要求。下面是一个示例代码:

#include <stdio.h>
#include <stdarg.h>

int my_sscanf(const char *str, const char *format, ...) __attribute__((format(scanf, 2, 3)));

int my_sscanf(const char *str, const char *format, ...)
{
    va_list args;
    va_start(args, format);
    int ret = vsscanf(str, format, args);
    va_end(args);
    return ret;
}

int main()
{
    int num;
    char str[100];
    const char *input = "10 hello";
    int ret = my_sscanf(input, "%d %s", &num, str);
    printf("ret = %d, num = %d, str = %s\n", ret, num, str);
    return 0;
}

在这个示例代码中,my_sscanf函数使用了__attribute__((format(scanf, 2, 3)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。在函数内部,我们使用vsscanf函数来从字符串中读取格式化数据。

main函数中,我们调用了my_sscanf函数,并传递了一个字符串和一个格式化字符串。由于我们使用了__attribute__((format(scanf, 2, 3)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(scanf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。文章来源地址https://www.toymoban.com/news/detail-419642.html

fscanf

好的,下面再举一个例子。假设我们有一个函数my_fscanf,它的作用是从一个文件中读取格式化数据。我们可以使用__attribute__((format(scanf, ...)))语法来指定函数参数的格式,从而帮助编译器检查函数调用时传递的参数是否符合格式化字符串的要求。下面是一个示例代码:

#include <stdio.h>
#include <stdarg.h>

int my_fscanf(FILE *fp, const char *format, ...) __attribute__((format(scanf, 2, 3)));

int my_fscanf(FILE *fp, const char *format, ...)
{
    va_list args;
    va_start(args, format);
    int ret = vfscanf(fp, format, args);
    va_end(args);
    return ret;
}

int main()
{
    int num;
    char str[100];
    FILE *fp = fopen("input.txt", "r");
    int ret = my_fscanf(fp, "%d %s", &num, str);
    printf("ret = %d, num = %d, str = %s\n", ret, num, str);
    fclose(fp);
    return 0;
}

在这个示例代码中,my_fscanf函数使用了__attribute__((format(scanf, 2, 3)))语法来指定函数参数的格式。这样,编译器就可以检查函数调用时传递的参数是否符合格式化字符串的要求。在函数内部,我们使用vfscanf函数来从文件中读取格式化数据。

main函数中,我们调用了my_fscanf函数,并传递了一个文件指针和一个格式化字符串。由于我们使用了__attribute__((format(scanf, 2, 3)))语法,编译器会检查这个函数调用是否符合格式化字符串的要求。如果我们在格式化字符串中使用了错误的格式化符号,例如%f,编译器就会给出一个警告或错误。

需要注意的是,__attribute__((format(scanf, ...)))语法只在GCC编译器中有效,其他编译器可能不支持这个语法。因此,在编写跨平台代码时,需要谨慎使用这个语法。

到了这里,关于【C/C++】format 格式化方法使用技巧(代码实例,皆可运行)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python基础——format格式化

      在python中,我们在输出字符串常用format方法设置一些特定的格式,以美化结果,同时便于更改字符串中指定内容。本文总结了format的常用方法。   format通过字符串中的花括号{}来识别和替换字符串,由此达到格式化字符串的目的。填充内容位置的识别,有按顺序自动替

    2024年02月02日
    浏览(34)
  • python中format格式化函数(全)

    格式化字符串的函数 str.format() 它增强了字符串格式化的功能。 通过用{} 和: 来代替 编程语言输出中的% 1.默认输出代码方式 输出hello world \\\" { } “输出{}内的内容以及” \\\"内的内容,空格也会跟着输出 2.指定位置的输出 输出hello,world 3.指定多个位置输出 输出world hello world 4.字

    2023年04月08日
    浏览(100)
  • clang-format格式化代码

    Clang-Format可用于格式化(排版)多种不同语言的代码。其自带的排版格式主要有:LLVM, Google, Chromium, Mozilla, WebKit等; 利用style参数配置风格。通过编写 .clang-format 文件,可以实现代码风格的配置。 [vscode-clang-format]https://github.com/xaverh/vscode-clang-format 在.vscode/setting.json中添加 Acc

    2024年02月13日
    浏览(32)
  • Clang-format格式化及配置参数

    Clang-format格式化C代码 Author:Once Day Date:2022年11月3日 漫漫长路有人对你微笑过嘛… 参考文档: Clang-Format Style Options — Clang 16.0.0git documentation (llvm.org) ClangFormat — Clang 16.0.0git documentation (llvm.org) clang-format的介绍和使用 - Tudou_Blog - 博客园 (cnblogs.com) 1.引言 Clang-format是一种代码

    2023年04月21日
    浏览(24)
  • 【VS】visual studio 代码格式化工具--clang-format

    分别表示格式化选中代码与格式化文档。、 虽然现在的🆚022 已经内置了,但是大部分的流程都是一样的 就生成了.clang-format文件: 附.clang-format文件:

    2024年02月11日
    浏览(49)
  • 【C++】Clang-Format:代码自动格式化(看这一篇就够了)

    Clang-format格式化C代码 官方参考文档: Clang-Format Style Options — Clang 16.0.0git documentation (llvm.org) ClangFormat — Clang 16.0.0git documentation (llvm.org) 1.引言安装 1.1引言 进入公司之后,会发现每个公司都有自己的代码规范,针对于其中的代码格式规范,手动去控制十分繁琐,因此这里提供

    2024年02月04日
    浏览(68)
  • python3字符串格式化用format()好还是 % 表达式好

    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。 公众号:一点sir,关注领取python编程资料 在 Python 中,使用 format() 方法是更推荐的方式来进行字符串格式化,特别是在Python3中。虽然 % 表达式仍然可以在Python中使用,但已经不推荐使用了,新的项目

    2024年04月16日
    浏览(48)
  • python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印

    (格式化替换,替换,列表字典替换,类格式化, 魔法函数格式化,对齐及填充格式化,format对齐打印) 本篇目录内容: 📘  一、format() 函数的语法 📘  二、format() 函数基本用法 📘  三、用对齐及填充的方式格式化 📘  四、用format函数实现对齐打印 📘  五、其他内容待

    2024年02月07日
    浏览(76)
  • WPF中Binding使用StringFormat格式化字符串方法

    货币格式 货币格式,一位小数 前文字 后文字 固定的位数,位数不能少于未格式化前,仅支持整形 指定小数点后的位数 用分号隔开的数字,并指定小数点后的位数 格式化百分比 占位符 日期/时间 或者 多重绑定 多重绑定中的特殊字符

    2024年02月15日
    浏览(29)
  • 使用JavaScript将数字格式化成千分位的n种方法

    1,使用数组方法: 1) 数字转字符串,字符串按照小数点.分割 2) 整数部分拆分成字符串数组,并倒叙 3) 遍历, 按照每三位添加逗号,号 4) 拼接整数部分+小数部分 2.使用字符串的substring截取 1) 数字转字符串,并按照小数点’.’分割 2) 整数部分对3取模,获取余数, 获得substring(0, 余数)的

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包