天天看點

C/C++ 字元串拼接 sprintf()C/C++ 字元串拼接 sprintf()

原創文章,轉載注明:https://blog.csdn.net/zaibeijixing/article/details/82983660

C/C++ 字元串拼接 sprintf()

       利用opencv 按時間命名圖檔并儲存到E盤指定位置,用到字元串拼接知識,找了一些資源,拼湊一下,試了試,還不錯,特此記錄、分享。

(注)opencv圖檔儲存算是小兒科,代碼不再貼出,隻給出完整的字元拼接代碼。

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

int main()
{
	//【01】擷取時間
	SYSTEMTIME sys;
	GetLocalTime(&sys);
	printf("%d-%d-%d_%02d-%02d-%02d-%03d\n", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);			//	列印時間
	char buf[50];
	sprintf_s(buf, "%d-%d-%d_%02d-%02d-%02d-%03d", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);	//	把時間變換為字元格式,儲存在buf中。
	cout << buf << endl;


	//【02】儲存路徑+時間,字元串拼接
	string name_s;
	string dir = "E:/mypic/";
	name_s += dir;
	name_s += buf;
	name_s += ".jpg";
	cout << name_s << endl;

	getchar();
	return 0;
}
           

參考的資源及部分的代碼知識點如下,按代碼順序:

①、擷取時間。SYSTEMTIME需要包含頭檔案#include <windows.h>;

②、轉換為字元格式。sprintf_s()函數;例下:

char buf[50];             //注意定義太小易導緻錯誤
sprintf_s(buf,"%d",i);    //把整型的i轉換為字元型的buf。    原本有多個參數,此處隻用這些。
           

③、字元拼接。

參考《c++拼接字元串效率比較(+=、append、stringstream、sprintf)》https://www.cnblogs.com/james6176/p/3222671.html

該文結論為:根據以上結果,如果是使用Linux系統并且是g++(gcc)編譯器,大量拼接字元串的效率從高到低依次為:+=、append()、stringstream、sprintf()。

本文直接采用+=,友善、有效。

④、字元串列印。

如果用cout列印string類型,則頭檔案包含的是#include <string>,而非<string.h>、<CString>。

參考《C++中關于string類型究竟能不能用cout輸出的問題》https://www.cnblogs.com/mzct123/p/4876185.html

另外字元轉字元串的初始化也有幾種種方式:char str[16];str[0]='a';str[1]='3'; 或char str[5]={'a','b','e'};或char str[12]="hello"; 或 char str[]="ab567";建議定義數組長度以免記憶體混亂錯誤。

原創文章,轉載注明:https://blog.csdn.net/zaibeijixing/article/details/82983660