sprintf基本用法

学过c语言的人都用过printf()这个函数,但是对于它的"兄弟"函数sprintf()这个函数就很少有人知道了,但是它的功能比printf()还要强大!

由于它比较强大,目前我也只理解了一小部分,现在先把所学的整理下来,以后有时间再去更新,研究.

废话不多说,直接上代码

#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=0;
int main()
{
    char str[100];

    sprintf(str,"%d",1234);
    cout<<"十进制1:"<<str<<endl;//1234

    sprintf(str,"% 10d",1234);
    cout<<"十进制2:"<<str<<endl;//      1234

    sprintf(str,"%o",1234);
    cout<<"八进制1:"<<str<<endl;//2322

    sprintf(str,"%#o",1234);
    cout<<"八进制2:"<<str<<endl;//02322

    sprintf(str,"%x",1234);
    cout<<"十六进制1:"<<str<<endl;//4d2

    sprintf(str,"%#x",1234);
    cout<<"十六进制2:"<<str<<endl;//0x4d2

    sprintf(str,"%#X",1234);
    cout<<"十六进制3:"<<str<<endl;//0x4D2

    sprintf(str,"%08X",1234);
    cout<<"十六进制4:"<<str<<endl;//000004D2


    sprintf(str,"%f",3.1415926);
    cout<<str<<endl;//3.141593

    sprintf(str,"%f",30.1415926);
    cout<<str<<endl;//30.141593

    //打印宽度为10,小数点后保留三位
    //宽度不足,默认补0
    sprintf(str,"%10.3f",3.1415926);
    cout<<str<<endl;//     3.142

    sprintf(str,"%010.3f",3.1415926);
    cout<<str<<endl;//000003.142

    sprintf(str,"%.3f",3.1415926);
    cout<<str<<endl;//3.142

    /**
    int i=100;
    sprintf(str,"%.2f",i);
    cout<<str<<endl;
    //注意,注释int i=100前无关代码
    //运行结果为0.00!!!
    sprintf(str,"%.2f",(double)i);
    cout<<str<<endl;//100.00
    */
    return 0;
}


### `sprintf` 函数在 C/C++ 中的使用方法和示例 `sprintf` 是 C/C++ 标准库中的一个函数,用于将格式化的数据写入字符串中。它与 `printf` 类似,不同之处在于 `sprintf` 将输出写入字符数组(字符串),而不是直接输出到控制台。该函数定义在 `<stdio.h>` 头文件中[^1]。 #### 函数原型 ```c int sprintf(char *str, const char *format, ...); ``` - `str`:指向目标字符数组的指针,用于存储格式化后的字符串。 - `format`:格式控制字符串,包含普通字符和格式说明符。 - `...`:可变参数列表,对应 `format` 中的格式说明符。 返回值为写入 `str` 的字符数(不包括终止的空字符 `\0`)。 #### 基本用法 以下是一个基本示例,展示了如何使用 `sprintf` 将整数转换为字符串并附加文本: ```c #include <stdio.h> int main() { char buffer[50]; int number = 42; sprintf(buffer, "The number is %d", number); printf("%s\n", buffer); // 输出: The number is 42 return 0; } ``` 该示例中,`%d` 是格式说明符,用于表示整数变量的插入位置[^2]。 #### 格式化不同类型的数据 `sprintf` 支持多种格式说明符,例如: - `%d`:十进制整数 - `%f`:浮点数 - `%s`:字符串 - `%c`:字符 - `%x`:十六进制整数(小写) - `%X`:十六进制整数(大写) 示例:格式化浮点数和字符串 ```c #include <stdio.h> int main() { char str[100]; float value = 3.14159; const char* name = "Alice"; sprintf(str, "Name: %s, Value: %.2f", name, value); printf("%s\n", str); // 输出: Name: Alice, Value: 3.14 return 0; } ``` 此示例中,`%.2f` 表示保留两位小数[^3]。 #### 安全性注意事项 使用 `sprintf` 时需注意目标缓冲区的大小,确保写入的数据不会超出其容量,否则可能导致缓冲区溢出。为提高安全性,建议使用 `snprintf`,它允许指定最大写入长度: ```c snprintf(str, sizeof(str), "Name: %s, Value: %.2f", name, value); ``` #### 字符串解析结合 `sscanf` 在处理格式化字符串时,`sscanf` 可用于从字符串中提取数据。例如: ```c #include <stdio.h> int main() { char input[] = "X=123 Y=45.67"; int x; float y; sscanf(input, "X=%d Y=%f", &x, &y); printf("X: %d, Y: %.2f\n", x, y); // 输出: X: 123, Y: 45.67 return 0; } ``` 这种组合在解析配置文件或协议数据时非常有用[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值