剑客
关注科技互联网

Sprintf不同版本比较

[TOC]

看到今天版本编译错误,原因是windows和linux的库函数不一样,结果导致了linux找不到函数,编译报错。几个函数还要搜索才能记起来分别在什么环境下使用以及细微的区别,干脆就把搜索的记录记下来做个总结。^_^

sprintf

  • 原型
int sprintf ( char * str, const char * format, ... );
  • 平台

windows和linux

  • 比较

sprintf和printf最大的区别是输出到不同的地方,前者是字符串,后者是终端。windows和linux区别不大,遇见了再补充。

snprintf

  • 原型
int snprintf ( char * s, size_t n, const char * format, ... );

说明:最多从源串中拷贝 n - 1 个字符到目标串中,然后再在后面加一个 0 。所以如果目标串的大小为 n的话,将不会溢出。

  • 平台

linux

  • 比较

最值得注意的:snprintf(linux)版本会自动在后面加’/0’,同时复制的长度也包含了’/0’。_snprintf(windows)版本只是简单的复制指定长度的字符,不自动加’/0’,并且长度也不包含’/0’。

看一个例子印象会深刻不少[2],看源码:

#include <stdio.h>
#include <string.h>
int main()
{
    char buf[20];
    char *pstr = "this is a test string";

    memset(buf, 0, sizeof(buf));
    snprintf(buf, sizeof(buf)-1, "%s", pstr);
    printf("buf = %s, strlen(buf) = %d/n", buf, strlen(buf));
    return 0;

}

结果:

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址