都是把格式好的字符串输出, 只是输出的目标不一样:
1 printf, 是把格式字符串输出到标准输出(一般是屏幕, 可以重定向).
2 sprintf, 是把格式字符串输出到指定字符串中, 所以参数比 printf 多一个 char*. 那就是目标字符串地址.
3 fprintf, 是把格式字符串输出到指定文件设备中, 所以参数笔 printf 多一个文件指针 FILE*.
fprintf 传送格式化输出到一个文件中. 根据指定的 format(格式)发送信息 (参数) 到由 stream(流)指定的文件, fprintf 只能和 printf 一样工作. 若成功则返回值是输出的字符数, 发生错误时返回一个负值. 第一个参数是文件指针 stream, 后面的参数就是 printf 中的参数, 其功能就是把这些输出送到文件指针指定的文件中, 如果想要像 printf 一样将输出送到标准输出, 只需要将文件指针 FILE 指定为 stdout 即可.
示例程序如下:
- [cpp] view plain copy
- print?
- #include
- FILE *stream;
- int
- main(void)
- {
- char s[] = "this is a string.\n";
- char c = '\n';
- stream = fopen("fprintf.out", "w");
- fprintf(stream, "%s", s);
- fprintf(stdout, "abc\n");
- return 0;
- }
该程序的运行结果是在 fprintf.out 文件中存入了 this is a string. 字符串, 在标准输出输出了 abc 字符串.
sprintf, 字符串格式化命令, 主要功能是把格式化的数据写入某个字符串中. 第一个参数 str 是 char 型指针, 指向将要写入的字符串的缓冲区. 后面第二个参数是格式化字符串.
示例程序:
- [cpp] view plain copy
- print?
- #include
- int
- main(void)
- {
- char s[100];
- sprintf(s, "%%sfjdksfj" );
- printf("%s\n", s);
- return 0;
- }
执行后输出结果是
- [cpp] view plain copy
- print?
- %sfjdksfj
snprintf 函数与 sprintf 函数类似. 它也是将可变个参数按照 format 格式化成字符串, 然后将其复制到 str 中.
(1) 如果格式化后的字符串长度 <size, 则将此字符串全部复制到 str 中, 并给其后添加一个字符串结束符 ('\0');(2) 如果格式化后的字符串长度>= size, 则只将其中的(size-1) 个字符复制到 str 中, 并给其后添加一个字符串结束符('\0'), 返回值为格式化后的字符串的长度.
示例程序:
- [cpp] view plain copy
- print?
- #include
- int
- main(void)
- {
- char s[10];
- snprintf(s, 4, "%%sfjdksfj" );
- printf("%s\n", s);
- snprintf(s, sizeof(s), "%%sfjdksfj" );
- printf("%s\n", s);
- return 0;
- }
运行结果:
- %sf
- %sfjdksfj
- int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);
函数说明: 最多从源串中拷贝 n-1 个字符到目标串中, 然后再在后面加一个 0. 所以如果目标串的大小为 n 的话, 将不会溢出.
函数返回值: 若成功则返回欲写入的字符串长度, 若出错则返回负值.
- Result1(推荐的用法)
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- char str[10]={
- 0,
- };
- snprintf(str, sizeof(str), "0123456789012345678");
- printf("str=%s/n", str);
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2957997.html