字符串函数和内存函数

1.字符串函数

字符串函数的头文件是string.h

1.1strcpy函数

这个函数的作用的是字符串的拷贝,将源指向的字符串复制到目标指向的数组中。

该函数的参数及返回值:

代码示例:

#include <stdio.h>
#include <string.h>

int main ()
{
  char str1[]="Sample string";
  char str2[40];
  char str3[40];
  strcpy (str2,str1);//把str1中的内容复制到str2中
  strcpy (str3,"copy successful");
  printf ("str1: %s\n str2: %s\n str3: %s\n",str1,str2,str3);
  return 0;
}

 运行结果:

  • 源字符串必须以‘\0’结束。
  • 该函数会将源字符串中的‘\0’拷贝到目标空间中
  • 目标空间必须足够大,保证能存放源字符串。并且目标空间必须可以修改。

 1.2strcat

 该函数的功能是连接字符串,将源字符串附加到目标字符串。(目的地和来源不应重叠)

代码示例:

int main ()
{
  char str[80];
  strcpy (str,"these ");
  strcat (str,"strings ");
  strcat (str,"are ");
  strcat (str,"concatenated.");
  puts (str);
  return 0;
}

运行结果:

  • 源字符串必须以'\0'结束
  • 目标字符串中也要有‘\0’,否则无法知晓从哪里开始追加
  • 目标空间必须足够大,并且目标空间可以修改

 1.3strcmp

该函数的作用是比较两个字符串的大小,比较的是两个字符串中对应位置的ASCII码值的大小。

该函数的返回值如图:

代码示例:

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abd";
	int ret = strcmp(arr1, arr2);
	if (ret > 0)
	{
		printf("arr1>arr2\n");
	}
	else if (ret < 0)
	{
		printf("arr1<arr2\n");
	}
	else
	{
		printf("arr1=arr2\n");
	}
	return 0;
}

 运行结果:

1.4strncpy

该函数与strcpy类似,都是用来对字符串的拷贝,不同的是该函数多了一个参数,用来说明从源字符串中复制的最大字符数。(目的地和来源不应重叠)

代码示例:

int main()
{
	char str1[] = "To be or not to be";
	char str2[40];
	char str3[40];
	strncpy(str2, str1, sizeof(str2));
	strncpy(str3, str2, 5);    
	str3[5] = '\0';
	puts(str1);
	puts(str2);
	puts(str3);
	return 0;
}

运行结果:

  • 若源字符串的长度小于num个,则拷贝完源字符串后,在目标空间的后面补‘\0’,直到num个

 1.5strncat

该函数与strcat相似,用来连接字符串,多的参数用来说明要追加的最大字符数。

代码:

int main ()
{
  char str1[20];
  char str2[20];
  strcpy (str1,"To be ");
  strcpy (str2,"or not to be");
  strncat (str1, str2, 6);
  puts (str1);
  return 0;
}

 运行结果:

  •  将源的前num个字符追加到目标,再加上一个终止的‘\0’字符。
  • 如果source中的C字符串的长度小于num,则只复制终止‘\0’字符之前的内容。

1.6strncmp

用来比较str1和str2前num个字符,如果相等就继续往后面比较,最多比较num个字母,如果提前发现不一样就提前结束。

返回值和strcmp相同。

代码:

int main()
{
    char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
    int n;
    puts("Looking for R2 astromech droids...");
    for (n = 0; n < 3; n++)
    {
        if (strncmp(str[n], "R2xx", 2) == 0)
        {
            printf("found %s\n", str[n]);
        }
    }
    return 0;
}

运行结果:

2.内存函数

2.1memcpy

该函数是用来复制内存块的,将num字节的值从源指向的位置直接复制到目标指向的内存块。(源和目标空间的内存块空间不能重叠,如果有任何重叠,则复制的结果都是为定义的)

其中num的单位是字节。

代码:

int main()
{
	int arr1[] = { 0,1,2,3,4,5,6,7,8,9 };
	int arr2[10] = { 0 };
	memcpy(arr2, arr1, sizeof(int) * 10);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

运行结果:

2.2memmove

memmove和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。

代码:

int main()
{
	int arr1[20] = { 0,1,2,3,4,5,6,7,9 };
	memmove(arr1 + 5, arr1, sizeof(int) * 3);
	for (int i = 0; i < 20; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}

运行结果:

2.3memset

memset是用来设置内存的,将内存块的前num个字节设置为想要的内容。

其中value是要设置的值。

代码:

int main()
{
	char str[] = "almost every programmer should know memset!";
	memset(str, '-', 6);
	puts(str);
	return 0;
}

运行结果:

2.4memcmp

该函数的作用是比较从ptr1和ptr2指针指向的位置开始,向后num个字节内容的大小。

返回值:

代码:

int main()
{
	char buffer1[] = "DWgaOtP12df0";
	char buffer2[] = "DWGAOTP12DF0";
	int 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;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值