1. 程式人生 > >sprintf sprintf_s ... 格式化字串 統一之路?

sprintf sprintf_s ... 格式化字串 統一之路?

不知道大家在格式化字串的時候是怎麼做的?是不是也通常使用 sprintf(buffer,"%s%d%s",.....) 這個函式嗎?

而在VS2005下,會提示這個函式已經過期了,並建議用更加安全的 sprintf_s(buffer,size,"%s",.....); 來代替。

sprintf_s 雖然安全,但現在還不是c++標準。特別是考慮到多個編譯環境或者跨平臺的情況下,還是不能放棄sprintf。

原來的做法是判斷不同的編譯環境和平臺環境,分別來處理。所以需要自己來寫預編譯的巨集定義。

那有沒有統一的解決方案?既可以安全,又不必寫很多巨集定義呢?

string跨平臺很好,曾經想過用stl中的string來實現。但遇到格式字串的時候,會覺得很不方便。一點一點的“+”,不爽,不如sprintf來的痛快。

otl是跨平臺的。無意中看到otlv4.h中的定義,發現原來它使用格式化字串時sprintf 做法竟也是使用的預編譯的巨集定義。呵呵。

暫時先延用這個方式吧。不過我自己再重新寫一個format函式。這樣畢竟可以少寫一點巨集定義。

void format(char* dest,size_t destlen,const char* fmt,...)
{
    va_list args;
    va_start(args, fmt);
#ifdef VC_ADVANCE
    _vsnprintf_s(dest,destlen,destlen,fmt,args);
#else
    _vsnprintf(dest,destlen,fmt,args);
#endif
    va_end(args);
}

網上還找到了一個方法:

#include <sstream>

using namespace std;

ostringstream tostring;

tostring<<_T(This is a string")<<X<<endl;

//get string object

string a = tostring.str();

//get const char*

char* ss = aa.c_str();

用流的方式似乎似乎好一點,但還是不那麼爽。呵呵。

相關推薦

sprintf sprintf_s ... 格式化字串 統一

不知道大家在格式化字串的時候是怎麼做的?是不是也通常使用 sprintf(buffer,"%s%d%s",.....) 這個函式嗎? 而在VS2005下,會提示這個函式已經過期了,並建議用更加安全的 sprintf_s(buffer,size,"%s",.....); 來代替

python-Day05字串格式化

format格式化方法 根據索引去傳一個值 tpl = "my name is {1},age{1}".format("ZhouJieLun",18,"milktea") print(tpl) 根據鍵值對的方法去傳一個值 如果需要傳字典那麼在括號的name前面加兩個**就可

Python小白學習(九)—【字串格式化】【百分號方式】【format方式】

寫在前面: 最近的事情好像有很多。李詠的離去,讓我覺得很突然,彷彿印象中就是主持節目的他,看著他和哈文的愛情,很是感動。離去,沒有什麼抱怨,只是遺憾。 總會感慨,時光的流逝。 好像真的很快,轉眼間,我都這麼大了。 最近,劉某人總說的一句話,小時候雖然很窮,但是很快樂 而現在,不僅僅是窮,而且還不快樂 想想還真

Python修行字符串(二)修改、查找、格式化

value 小寫 %d aar suffix mat 定義 常量 大寫 字符串修改replace(old,new[,count]) - > str字符串中找到匹配替換為新子串,返回新字符串count表示替換幾次,不指定就是全部替換原字符串為一個常量,不可變。修改返回的

Spring Cloud 進階 -- 統一配置中心 Config Client 端配置

Spring Cloud 統一配置中心 - Config Client 搭建步驟: 1、引入依賴 2、application.yml 改為 bootstrap.yml 3、增加spring.cloud.config 相關配置,去掉已提交到git的配置 4、測試去掉的配置是否能從g

Spring Cloud 進階 -- 統一配置中心 Config Server 搭建

Spring Cloud 的統一配置中心 - Config Server 搭建步驟: 1、新建一個git專案待使用(我用了gitee) 2、本地新建專案,引入依賴 3、啟動類加註解支援,配置檔案新增git支援(svn類似) 4、啟動測試 5、關於檔案命名規則  

Leetcode_394_ Decode String_dfs搜尋_我的演算法_解密字串

在這個題目中,在給定3[a]2[bc]這種形式的字串,我們需要來解密這個字串,即用遞迴的思想來做下面是我的程式碼 class Solution { public: string decodeString(string s) { string res;

基於統一開發平臺的微服務架構轉型升級 | 某國有大型銀行案例

轉載本文需註明出處:EAWorld,違者必究。   引言: 某銀行是一家國有大型銀行,從2016年開始採用了我們的SOA開發平臺作為基礎Java開發平臺。 2018年,我們釋出了新一代微服務開發平臺EOS Platform 8,而其正在謀求技術架構轉型升級,正好藉助我們的新

python學習-基本資料型別1 變數的概念、數字、字串

1 什麼是資料型別? 每種程式語言都有自己的資料型別,用於標識計算機可以認識的資料,Python中主要的資料型別為字串,整數,浮點數,列表,元祖,字典,集合七種主要的資料型別,其中以列表,字典為最主要的資料型別。 2 什麼是變數? 在說資料型別之前,首先說一下變數,那什麼是變數?簡單講,變數就是一個容器

Python Webflask session&格式化字串漏洞!

這是在參加百越杯CTF遇到的一道題目,其中涉及到兩個python安全相關的知識點,在此做一個總結。 flask session問題 由於 flask 是非常輕量級的 Web框架 ,其 session 儲存在客戶端中(可以通過HTTP

《程式設計珠璣》程式碼3:40(2^32)億個不重複數尋找缺失值,字串旋轉,字典的變位詞集合

1:第一題,給一個40億個數的順序32位整數集合,尋找一個缺失數,時空複雜度O(n)。 題目給的是2^32的資料範圍,就是32位數,但事實上換成3位數字道理一樣的,所以就以3位數字(0-7)為例: 比如:0, 1, 2, 3, 4, 6, 7,缺失值是5。 好了接下來寫

Python基礎進階(四)元組、字典和字串

元組 元組的定義   Tuple(元組)與列表類似,不同之處在於元組的 元素不能修改     元組 表示多個元素組成的序列   元組 在 Python 開發中,有特定的應用場景   用於儲存 一串 資訊,資料 之間使用

Python基礎進階(五)字串

字串 字串的定義 字串 就是 一串字元,是程式語言中表示文字的資料型別 在 Python 中可以使用 一對雙引號 " 或者 一對單引號 ' 定義一個字串 雖然可以使用 \" 或者 \' 做字串的轉義,但是在實際開發中: 如果字串內部需要使用 ",可以使用 ' 定義字串 如果字串內部需要使用

sprintf格式化字串

<?php $num="5.555555"; $str="str"; printf('%.0f <br/>',$num);//將$num轉化為帶0個小數點的浮點型別輸出:四捨五入 printf('%.2f %s <br/>',$num,$......

python---03 整型 bool 字串 for迴圈

十三、整型(int)       基本操作:       1.+ - * / % // **       2.  .bit_length() 計算整數在記憶體中佔⽤的⼆進位制碼的⻓度 如:

phper 的Goland學習--- 字元和字串處理

1、把字串變成字元切片(字元陣列):(字元切片以位元組為基本單位)            ch := ( []byte)字串變數;   // ch  := ([]byte)("li離開");   佔用 2+3+3 = 8個位元組字元切片li離離離開開開\0離:佔用三個位元組;

Java (十三) -- 字串(String、正則表示式)

個人吐槽:對於這章,第一遍讀和重讀之後果然看法不同:第一次讀時覺得,文章用了大篇幅來介紹 API,這樣我可以比較容易理解這個方法是幹嘛的,以此理解這個類是幹嘛的;但是重讀之後覺得,文章居然用了這麼大篇幅在講 API(尤其是正則表示式),如果我需要知道具體某

C語言進階------字串的反序輸出(輸入字串然後呼叫函式反序輸出)

#include<stdio.h> #include<string.h> int main() {void fanxu(char x[]);char a[80];scanf("%s",a);fanxu(a);printf("%s\n",a);retu

2 -12 字串編碼 python ,致那些年,我們依然沒搞明白的編碼

python 之路,致那些年,我們依然沒搞明白的編碼 python編碼終極版     1 檔案與記憶體的編碼格式 搞清楚了ASCII、Unicode和UTF-8的關係,我們就可以總結一下現在計算機系統通用的字元編碼工作方式: 在計算機記憶體中,統一使用Unicode編碼,當

golang自學(Printf格式化輸出語句的常用方法和控制檯輸入)2

package main import "fmt" func main() { a,b:=123,321 c,d:="dsds",5.5 fmt.Print("你好,世界!")//輸出控制檯 fmt.Println(a)//輸出控制檯後自動換行 fmt.Printf