wcsncpy_s
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
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.732053
character count = 53
memset
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
memcmp:将 ptr1
指向的内存块的前 num
字节与 ptr2
指向的前 num
字节进行比较,如果它们都匹配则返回零,否则返回一个不同于零的值,表示如果它们不匹配则哪个更大。定义在string.h
中。
请注意,与 strcmp
不同,该函数在找到空字符后不会停止比较。
扫描二维码关注公众号,回复:
14976092 查看本文章
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
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