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 Web之flask 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