C/C++中關(guān)于字符串的常見函數(shù)操作大全
wcsncpy_s
wcsncpy_s:將一個(gè)寬字符串的字符復(fù)制到另一個(gè)寬字符串。定義在頭文件<wchar.h>中
errno_t wcsncpy_s( wchar_t *strDest, size_t numberOfElements, const wchar_t *strSource, size_t count );
| 參數(shù) | 說明 |
|---|---|
| strDest | 目標(biāo)字符串 |
| numberOfElements | 目標(biāo)字符串的大?。ㄒ宰址麨閱挝唬?/td> |
| strSource | 資源字符串 |
| count | 要復(fù)制的字符數(shù) |
示例
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
const wchar_t src[] = L"南京";
wchar_t dest[6] = { L'北', L'京', L'上', L'海', L'深' };
wcsncpy_s(dest, 3, src, 3);
puts("The contents of dest are: ");
setlocale(LC_ALL, "en_US.utf8");
const long dest_size = sizeof dest / sizeof * dest; // dest_size = 6
for (wchar_t* p = dest; p - dest != dest_size; ++p) {
if (*p)
printf("%lc ", *p);
else
printf("\\0 ");
}
}結(jié)果
The contents of dest are:
南 京 \0 海 深 \0
swprintf_s
swprintf_s:將設(shè)置格式的數(shù)據(jù)寫入字符串。定義在頭文件<stdio.h> 或 <wchar.h>中
int swprintf_s( wchar_t *buffer, size_t sizeOfBuffer, const wchar_t *format, ... );
| 參數(shù) | 說明 |
|---|---|
| buffer | 輸出的存儲(chǔ)位置 |
| sizeOfBuffer | 可存儲(chǔ)的最多字符數(shù) |
| format | 格式控件字符串 |
| … | 要設(shè)置格式的可選參數(shù) |
示例
#include <stdio.h>
int main(void)
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f;
// Format and print various data:
j = sprintf_s(buffer, 200, "String:%s\n", s);
j += sprintf_s(buffer + j, 200 - j, "Character:%c\n", c);
j += sprintf_s(buffer + j, 200 - j, "Integer:%d\n", i);
j += sprintf_s(buffer + j, 200 - j, "Real:%f\n", fp);
printf_s("Output:\n%s\ncharacter count = %d\n", buffer, j);
}輸出
Output:
String:computer
Character:l
Integer:35
Real:1.732053character count = 53
memset
memset:將 ptr 指向的內(nèi)存塊的前 num 字節(jié)設(shè)置為指定值(解釋為無符號(hào)字符)。定義在頭文件string.h中
void * memset ( void * ptr, int value, size_t num );
| 參數(shù) | 說明 |
|---|---|
| ptr | 指向要填充的內(nèi)存塊的指針 |
| value | 要設(shè)置的值。 該值作為 int 傳遞,但該函數(shù)使用該值的無符號(hào)字符轉(zhuǎn)換填充內(nèi)存塊。 |
| num | 要設(shè)置為值的字節(jié)數(shù)。size_t 是無符號(hào)整數(shù)類型。 |
示例
/* memset example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "almost every programmer should know memset!";
memset(str, '-', 5);
puts(str);
return 0;
}輸出
-----t every programmer should know memset!
memcmp
memcmp:將 ptr1 指向的內(nèi)存塊的前 num 字節(jié)與 ptr2 指向的前 num 字節(jié)進(jìn)行比較,如果它們都匹配則返回零,否則返回一個(gè)不同于零的值,表示如果它們不匹配則哪個(gè)更大。定義在string.h中。
請(qǐng)注意,與 strcmp 不同,該函數(shù)在找到空字符后不會(huì)停止比較。
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
| 參數(shù) | 說明 |
|---|---|
| ptr1 | 內(nèi)存塊的指針 |
| ptr2 | 內(nèi)存塊的指針 |
| num | 比較的字節(jié)數(shù) |
| 返回值 | 說明 |
|---|---|
| <0 | 兩個(gè)內(nèi)存塊中不匹配的第一個(gè)字節(jié)在 ptr1 中的值小于 ptr2 中的值(如果評(píng)估為 unsigned char 值) |
| >0 | 兩個(gè)內(nèi)存塊中不匹配的第一個(gè)字節(jié)在 ptr1 中的值大于在 ptr2 中的值(如果評(píng)估為 unsigned char 值) |
| =0 | 兩個(gè)內(nèi)存塊的內(nèi)容相等 |
/* memcmp example */
#include <stdio.h>
#include <string.h>
int main()
{
char buffer1[] = "DWgaOtP12df0";
char buffer2[] = "DWGAOTP12DF0";
int n;
n = memcmp(buffer1, buffer2, sizeof(buffer1));
if (n > 0) printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
else if (n < 0) printf("'%s' is less than '%s'.\n", buffer1, buffer2);
else printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
return 0;
}輸出
'DWgaOtP12df0' is greater than 'DWGAOTP12DF0'.
memcpy
memcpy:將 num 個(gè)字節(jié)的值從 source 指向的位置直接復(fù)制到 destination 指向的內(nèi)存塊。
void * memcpy ( void * destination, const void * source, size_t num );
示例
/* memcpy example */
#include <stdio.h>
#include <string.h>
struct {
char name[40];
int age;
} person, person_copy;
int main ()
{
char myname[] = "Pierre de Fermat";
/* using memcpy to copy string: */
memcpy ( person.name, myname, strlen(myname)+1 );
person.age = 46;
/* using memcpy to copy structure: */
memcpy ( &person_copy, &person, sizeof(person) );
printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );
return 0;
}
Edit & Run輸出
person_copy: Pierre de Fermat, 46
wcslen
wcslen:返回C寬字符串的長(zhǎng)度
size_t wcslen (const wchar_t* wcs);
示例
/* wcslen example */
#include <stdio.h>
#include <wchar.h>
int main()
{
wchar_t wsInput[256];
wprintf(L"Enter a sentence: ");
fgetws(wsInput, 256, stdin); /* includes newline characters */
wprintf(L"You entered %u characters.\n", wcslen(wsInput));
return 0;
}輸出
Enter a sentence: 南京
You entered 5 characters.
LoadStringW
LoadStringW不是C/C++中標(biāo)準(zhǔn)庫(kù)函數(shù),而是windows的一個(gè)接口。定義在libloaderapi.h頭文件中。從與指定模塊關(guān)聯(lián)的可執(zhí)行文件中加載字符串資源,并將該字符串復(fù)制到具有終止 null 字符的緩沖區(qū)中,或者返回指向字符串資源本身的只讀指針。
int LoadStringW( [in, optional] HINSTANCE hInstance, [in] UINT uID, [out] LPWSTR lpBuffer, [in] int cchBufferMax );
| 參數(shù) | 說明 |
|---|---|
| hInstance | 其可執(zhí)行文件包含字符串資源的模塊實(shí)例的句柄 |
| uID | 要加載的字符串的標(biāo)識(shí)符 |
| lpBuffer | 用于接收字符串或指向字符串資源本身的只讀指針的緩沖區(qū) |
| cchBufferMax | 緩沖區(qū)的大小,以字符為單位 |
GetModuleHandleW
GetModuleHandleW不是C/C++中標(biāo)準(zhǔn)庫(kù)函數(shù),而是windows的一個(gè)接口。定義在libloaderapi.h頭文件中。檢索指定模塊的模塊句柄。該模塊必須已由調(diào)用進(jìn)程加載。
HMODULE GetModuleHandleW( [in, optional] LPCWSTR lpModuleName );
lpModuleName:加載的模塊的名稱(.dll或.exe文件)。如果省略文件擴(kuò)展名,則會(huì)追加默認(rèn)的庫(kù)擴(kuò)展名.dll。文件名字符串可以包含尾隨點(diǎn)字符 (.),以指示模塊名稱沒有擴(kuò)展名。該字符串不必指定路徑。指定路徑時(shí),請(qǐng)確保使用反斜杠 (\),而不是正斜杠 (/)。該名稱將與當(dāng)前映射到調(diào)用進(jìn)程的地址空間的模塊的名稱進(jìn)行比較(大小寫?yīng)毩ⅲ?/p>
如果此參數(shù)為 NULL,則 GetModuleHandle 將返回用于創(chuàng)建調(diào)用進(jìn)程的文件的句柄(.exe文件)。
以下幾個(gè)函數(shù)是Rpcrt4.dll動(dòng)態(tài)庫(kù)中的。
UuidFromStringW
UuidFromStringW:轉(zhuǎn)換一個(gè)字符串為Uuid結(jié)構(gòu)。定義在rpcdce.h頭文件中
RPC_STATUS UuidFromStringW( RPC_WSTR StringUuid, UUID *Uuid );
| 參數(shù) | 說明 |
|---|---|
| StringUuid | 指向 UUID 的字符串表示形式的指針 |
| Uuid | 以二進(jìn)制形式返回指向 UUID 的指針 |
UUID 結(jié)構(gòu)定義了通用唯一標(biāo)識(shí)符 (UUID)。UUID 提供對(duì)象(如接口、管理器入口點(diǎn)向量或客戶端對(duì)象)的唯一指定。UUID 結(jié)構(gòu)是 GUID 結(jié)構(gòu)的同義詞。
typedef GUID UUID;
GUID 標(biāo)識(shí)對(duì)象,有如 COM 接口、COM 類對(duì)象或管理器入口點(diǎn)向量 (EPV)。GUID 是一個(gè) 128 位值,由一組 8 個(gè)十六進(jìn)制數(shù)字組成,后跟三組,每組 4 個(gè)十六進(jìn)制數(shù)字,后跟一組 12 個(gè)十六進(jìn)制數(shù)字。以下示例 GUID 顯示了 GUID 中十六進(jìn)制數(shù)字的分組:6B29FC40-CA47-1067-B31D-00DD010662DA。
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;UuidCompare
UuidCompare:比較兩個(gè) UUID并確定它們的順序。返回值給出順序。
signed int UuidCompare( UUID *Uuid1, UUID *Uuid2, RPC_STATUS *Status );
| 參數(shù) | 說明 |
|---|---|
| Uuid1 | 指向 UUID 的指針 |
| Uuid2 | 指向 UUID 的指針 |
| Status | 返回可能發(fā)生的任何錯(cuò)誤,并且通常由函數(shù)設(shè)置為在返回時(shí)RPC_S_OK |
| 返回值 | 意義 |
|---|---|
| –1 | Uuid1 參數(shù)小于 Uuid2 參數(shù) |
| 0 | Uuid1 參數(shù)等于 Uuid2 參數(shù) |
| 1 | Uuid1 參數(shù)大于 Uuid2 參數(shù) |
UuidHash
UuidHash:應(yīng)用程序調(diào)用 UuidHash 函數(shù)為指定的 UUID 生成哈希值。
unsigned short UuidHash( UUID *Uuid, RPC_STATUS *Status );
| 參數(shù) | 說明 |
|---|---|
| Uuid | 為其創(chuàng)建哈希值的 UUID |
| Status | 返回RPC_S_OK |
UuidCreate
UuidCreate:創(chuàng)建一個(gè)新的 UUID
RPC_STATUS UuidCreate( UUID *Uuid );
Uuid:返回指向創(chuàng)建的 UUID 的指針
| 返回值 | 意義 |
|---|---|
| RPC_S_OK | 調(diào)用成功 |
| RPC_S_UUID_LOCAL_ONLYUUID | 保證僅對(duì)此計(jì)算機(jī)是唯一的 |
| RPC_S_UUID_NO_ADDRESS | 無法獲取此計(jì)算機(jī)的以太網(wǎng)或令牌環(huán)硬件地址 |
wcstok_s
strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l
通過使用當(dāng)前區(qū)域設(shè)置或傳入的區(qū)域設(shè)置,查找字符串中的下一個(gè)標(biāo)記
wchar_t* wcstok_s( wchar_t* str, const wchar_t* delimiters, wchar_t** context );
將字符串轉(zhuǎn)換為整數(shù)。
int _wtoi( const wchar_t *str );
_wcstombs_s_l
_wcstombs_s_l:將寬字符序列轉(zhuǎn)換為相應(yīng)的多字節(jié)字符序列。
errno_t _wcstombs_s_l( size_t *pReturnValue, char *mbstr, size_t sizeInBytes, const wchar_t *wcstr, size_t count, _locale_t locale );
| 參數(shù) | 含義 |
|---|---|
| pReturnValue | 轉(zhuǎn)換后的字符串的大?。ㄒ宰止?jié)為單位),包括空終止符。 |
| mbstr | 轉(zhuǎn)換后的多字節(jié)字符串的緩沖區(qū)地址。 |
| sizeInBytes | mbstr 緩沖區(qū)的大?。ㄒ宰止?jié)為單位)。 |
| wcstr | 指向要轉(zhuǎn)換的寬字符串。 |
| count | 要存儲(chǔ)在 mbstr 緩沖區(qū)中的最大字節(jié)數(shù),不包括終止空字符或 _TRUNCATE。 |
| locale | 要使用的語言環(huán)境 |
WritePrivateProfileStringA
WritePrivateProfileStringA:將字符串復(fù)制到初始化文件的指定部分。
BOOL WritePrivateProfileStringA( [in] LPCSTR lpAppName, [in] LPCSTR lpKeyName, [in] LPCSTR lpString, [in] LPCSTR lpFileName );
| 參數(shù) | 含義 |
|---|---|
| lpAppName | 字符串將被復(fù)制到的部分的名稱。 如果該部分不存在,則創(chuàng)建它。 部分的名稱與大小寫無關(guān); 字符串可以是大寫和小寫字母的任意組合。 |
| lpKeyName | 要與字符串關(guān)聯(lián)的鍵的名稱。 如果指定部分中不存在該鍵,則創(chuàng)建它。 如果此參數(shù)為 NULL,則刪除整個(gè)部分,包括該部分中的所有條目。 |
| lpString | 要寫入文件的以 null 結(jié)尾的字符串。 如果此參數(shù)為 NULL,則刪除 lpKeyName 參數(shù)指向的鍵。 |
| lpFileName | 初始化文件的名稱。如果文件是使用 Unicode 字符創(chuàng)建的,則該函數(shù)將 Unicode 字符寫入文件。 否則,該函數(shù)將寫入 ANSI 字符。 |
到此這篇關(guān)于C/C++中關(guān)于字符串的常見函數(shù)操作的文章就介紹到這了,更多相關(guān)C++字符串常見函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文詳解C++中動(dòng)態(tài)內(nèi)存管理
這篇文章主要介紹了一文詳解C++中動(dòng)態(tài)內(nèi)存管理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)孩子沒需要的朋友可以才可以參考一下2022-07-07
Visual Studio Code 2020安裝教程及CPP環(huán)境配置(教程圖解)
這篇文章主要介紹了Visual Studio Code 2020安裝教程、CPP環(huán)境配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
C語言超詳細(xì)講解棧的實(shí)現(xiàn)及代碼
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧、入?;驂簵#前研略胤诺綏m斣氐纳厦?,使之成為新的棧頂元素2022-04-04
解析C++浮點(diǎn)數(shù)無效值的定義與無效值判定的小結(jié)
本篇文章是對(duì)C++中浮點(diǎn)數(shù)無效值的定義與無效值的判定進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

