您好,登錄后才能下訂單哦!
本篇內容介紹了“C/C++中關于字符串的常見函數操作方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
wcsncpy_s:將一個寬字符串的字符復制到另一個寬字符串。定義在頭文件<wchar.h>
中
errno_t wcsncpy_s( wchar_t *strDest, size_t numberOfElements, const wchar_t *strSource, size_t count );
參數 | 說明 |
---|---|
strDest | 目標字符串 |
numberOfElements | 目標字符串的大小(以字符為單位) |
strSource | 資源字符串 |
count | 要復制的字符數 |
示例
#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 "); } }
結果
The contents of dest are:
南 京 \0 海 深 \0
swprintf_s:將設置格式的數據寫入字符串。定義在頭文件<stdio.h> 或 <wchar.h>
中
int swprintf_s( wchar_t *buffer, size_t sizeOfBuffer, const wchar_t *format, ... );
參數 | 說明 |
---|---|
buffer | 輸出的存儲位置 |
sizeOfBuffer | 可存儲的最多字符數 |
format | 格式控件字符串 |
… | 要設置格式的可選參數 |
示例
#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:將 ptr
指向的內存塊的前 num
字節設置為指定值(解釋為無符號字符)。定義在頭文件string.h
中
void * memset ( void * ptr, int value, size_t num );
參數 | 說明 |
---|---|
ptr | 指向要填充的內存塊的指針 |
value | 要設置的值。 該值作為 int 傳遞,但該函數使用該值的無符號字符轉換填充內存塊。 |
num | 要設置為值的字節數。size_t 是無符號整數類型。 |
示例
/* 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:將 ptr1
指向的內存塊的前 num
字節與 ptr2
指向的前 num
字節進行比較,如果它們都匹配則返回零,否則返回一個不同于零的值,表示如果它們不匹配則哪個更大。定義在string.h
中。
請注意,與 strcmp
不同,該函數在找到空字符后不會停止比較。
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
參數 | 說明 |
---|---|
ptr1 | 內存塊的指針 |
ptr2 | 內存塊的指針 |
num | 比較的字節數 |
返回值 | 說明 |
---|---|
<0 | 兩個內存塊中不匹配的第一個字節在 ptr1 中的值小于 ptr2 中的值(如果評估為 unsigned char 值) |
>0 | 兩個內存塊中不匹配的第一個字節在 ptr1 中的值大于在 ptr2 中的值(如果評估為 unsigned char 值) |
=0 | 兩個內存塊的內容相等 |
/* 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:將 num
個字節的值從 source
指向的位置直接復制到 destination
指向的內存塊。
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:返回C寬字符串的長度
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不是C/C++中標準庫函數,而是windows
的一個接口。定義在libloaderapi.h
頭文件中。從與指定模塊關聯的可執行文件中加載字符串資源,并將該字符串復制到具有終止 null 字符的緩沖區中,或者返回指向字符串資源本身的只讀指針。
int LoadStringW( [in, optional] HINSTANCE hInstance, [in] UINT uID, [out] LPWSTR lpBuffer, [in] int cchBufferMax );
參數 | 說明 |
---|---|
hInstance | 其可執行文件包含字符串資源的模塊實例的句柄 |
uID | 要加載的字符串的標識符 |
lpBuffer | 用于接收字符串或指向字符串資源本身的只讀指針的緩沖區 |
cchBufferMax | 緩沖區的大小,以字符為單位 |
GetModuleHandleW不是C/C++中標準庫函數,而是windows
的一個接口。定義在libloaderapi.h
頭文件中。檢索指定模塊的模塊句柄。該模塊必須已由調用進程加載。
HMODULE GetModuleHandleW( [in, optional] LPCWSTR lpModuleName );
lpModuleName
:加載的模塊的名稱(.dll或.exe文件)。如果省略文件擴展名,則會追加默認的庫擴展名.dll。文件名字符串可以包含尾隨點字符 (.),以指示模塊名稱沒有擴展名。該字符串不必指定路徑。指定路徑時,請確保使用反斜杠 (\),而不是正斜杠 (/)。該名稱將與當前映射到調用進程的地址空間的模塊的名稱進行比較(大小寫獨立)。
如果此參數為 NULL,則 GetModuleHandle 將返回用于創建調用進程的文件的句柄(.exe文件)。
以下幾個函數是Rpcrt4.dll
動態庫中的。
UuidFromStringW:轉換一個字符串為Uuid
結構。定義在rpcdce.h
頭文件中
RPC_STATUS UuidFromStringW( RPC_WSTR StringUuid, UUID *Uuid );
參數 | 說明 |
---|---|
StringUuid | 指向 UUID 的字符串表示形式的指針 |
Uuid | 以二進制形式返回指向 UUID 的指針 |
UUID 結構定義了通用唯一標識符 (UUID)。UUID 提供對象(如接口、管理器入口點向量或客戶端對象)的唯一指定。UUID 結構是 GUID 結構的同義詞。
typedef GUID UUID;
GUID 標識對象,有如 COM 接口、COM 類對象或管理器入口點向量 (EPV)。GUID 是一個 128 位值,由一組 8 個十六進制數字組成,后跟三組,每組 4 個十六進制數字,后跟一組 12 個十六進制數字。以下示例 GUID 顯示了 GUID 中十六進制數字的分組:6B29FC40-CA47-1067-B31D-00DD010662DA。
typedef struct _GUID { unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[8]; } GUID;
UuidCompare:比較兩個 UUID并確定它們的順序。返回值給出順序。
signed int UuidCompare( UUID *Uuid1, UUID *Uuid2, RPC_STATUS *Status );
參數 | 說明 |
---|---|
Uuid1 | 指向 UUID 的指針 |
Uuid2 | 指向 UUID 的指針 |
Status | 返回可能發生的任何錯誤,并且通常由函數設置為在返回時RPC_S_OK |
返回值 | 意義 |
---|---|
–1 | Uuid1 參數小于 Uuid2 參數 |
0 | Uuid1 參數等于 Uuid2 參數 |
1 | Uuid1 參數大于 Uuid2 參數 |
UuidHash:應用程序調用 UuidHash
函數為指定的 UUID
生成哈希值。
unsigned short UuidHash( UUID *Uuid, RPC_STATUS *Status );
參數 | 說明 |
---|---|
Uuid | 為其創建哈希值的 UUID |
Status | 返回RPC_S_OK |
UuidCreate:創建一個新的 UUID
RPC_STATUS UuidCreate( UUID *Uuid );
Uuid
:返回指向創建的 UUID
的指針
返回值 | 意義 |
---|---|
RPC_S_OK | 調用成功 |
RPC_S_UUID_LOCAL_ONLYUUID | 保證僅對此計算機是唯一的 |
RPC_S_UUID_NO_ADDRESS | 無法獲取此計算機的以太網或令牌環硬件地址 |
strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l
通過使用當前區域設置或傳入的區域設置,查找字符串中的下一個標記
wchar_t* wcstok_s( wchar_t* str, const wchar_t* delimiters, wchar_t** context );
atoi, , ,_atoi_l_wtoi_wtoi_l
將字符串轉換為整數。
int _wtoi( const wchar_t *str );
_wcstombs_s_l:將寬字符序列轉換為相應的多字節字符序列。
errno_t _wcstombs_s_l( size_t *pReturnValue, char *mbstr, size_t sizeInBytes, const wchar_t *wcstr, size_t count, _locale_t locale );
參數 | 含義 |
---|---|
pReturnValue | 轉換后的字符串的大小(以字節為單位),包括空終止符。 |
mbstr | 轉換后的多字節字符串的緩沖區地址。 |
sizeInBytes | mbstr 緩沖區的大小(以字節為單位)。 |
wcstr | 指向要轉換的寬字符串。 |
count | 要存儲在 mbstr 緩沖區中的最大字節數,不包括終止空字符或 _TRUNCATE 。 |
locale | 要使用的語言環境 |
WritePrivateProfileStringA:將字符串復制到初始化文件的指定部分。
BOOL WritePrivateProfileStringA( [in] LPCSTR lpAppName, [in] LPCSTR lpKeyName, [in] LPCSTR lpString, [in] LPCSTR lpFileName );
參數 | 含義 |
---|---|
lpAppName | 字符串將被復制到的部分的名稱。 如果該部分不存在,則創建它。 部分的名稱與大小寫無關; 字符串可以是大寫和小寫字母的任意組合。 |
lpKeyName | 要與字符串關聯的鍵的名稱。 如果指定部分中不存在該鍵,則創建它。 如果此參數為 NULL,則刪除整個部分,包括該部分中的所有條目。 |
lpString | 要寫入文件的以 null 結尾的字符串。 如果此參數為 NULL,則刪除 lpKeyName 參數指向的鍵。 |
lpFileName | 初始化文件的名稱。如果文件是使用 Unicode 字符創建的,則該函數將 Unicode 字符寫入文件。 否則,該函數將寫入 ANSI 字符。 |
“C/C++中關于字符串的常見函數操作方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。