C/C++中关于字符串的常见函数操作

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

猜你喜欢

转载自blog.csdn.net/Star_ID/article/details/125566128