C语言学习笔记之 字符操作函数

字符操作函数

头文件

#include <string.h>

strcpy字符拷贝

#include <string.h>

char * strcpy(char * dest,const char * source);
功能:将source所指的字符串拷贝到dest所指的内存空间中,
      ''也会被拷贝
参数:
    dest:目的字符串首地址
    source:源字符首地址
返回:
    成功:dest字符串首地址
    失败:NULL

注意!如果dest所指的内存不够大,则可能造成缓冲溢出
例:

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

int main(int argc, char *argv[])
{
	char s[20] = "";
	strcpy(s,"Helloworld!");
	puts(s);

	return 0;
}
Hello

strncpy只拷贝前n个字符

#include <string.h>

char * strncpy(char * dest,const char * source,size_t n);
功能:将source所指字符串的前n个字符拷贝到dest所指的内存空间中,
      ''也会被拷贝
参数:
    dest:目的字符串首地址
    source:源字符首地址
    n:拷贝字符个数
返回:
    成功:dest字符串首地址
    失败:NULL

是否结束拷贝是由''决定的
例:

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

int main(int argc, char *argv[])
{
	char s1[20] = "";
	char s2[20] = "";
	strncpy(s1,"Helloworld!",7);
	puts(s1);

	strncpy(s2,"Hello world!",7);
	puts(s2);

	return 0;
}
Hello
Hello w

strcat字符串拼接

#include <string.h>

char * strcat(char * dest,const char * source);
功能:将source所指的字符串连接到dest字符串后面,''也会追加
参数:
    dest:目的字符串首地址
    source:源字符首地址
返回:
    成功:dest字符串首地址
    失败:NULL

例:

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

int main(int argc, char *argv[])
{
	char s1[20] = "Hello";
	char s2[20] = " world";
	strcat(s1,s2);
	puts(s1);

	return 0;
}
Hello world

strncat

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

int main(int argc, char *argv[])
{
	char s1[20] = "Hello";
	char s2[20] = " world";
	strncat(s1,s2,3);
	puts(s1);

	return 0;
}
Hello wo

strcmp比较字符串大小

#include <string.h>

char * strcmp(const char *str1,const char *str2);
功能:比较str1和str2的ASCII字符大小
参数:
    str1:字符串1首地址
    str2:字符串2首地址
返回:
    相等:0
    大于:>0
    小于:<0
    不同操作系统会有差异

例:

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

int main(int argc, char *argv[])
{
	char s1[20] = "Hello";
	char s2[20] = "world";
	printf("%d
%d
",strcmp(s1,"Hello"),strcmp(s1,s2));

	return 0;
}
0
-1

strncmp

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

int main(int argc, char *argv[])
{
	char s1[20] = "Hello";
	char s2[20] = "world";
	printf("%d
%d
",strcmp(s1,"Hello"),strncmp(s1,s2,1));

	return 0;
}
0
-47

组包解包

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

int main(int argc, char *argv[])
{
	char s1[20];
	// 将字符串组包(格式化)后保存到s1中
	sprintf(s1,"Hello%d,%s",123,"abcd");
	int a;
	char b[5];
	// 将字符串解包后分别保存到变量中
	sscanf(s1,"Hello%d,%s",&a,&b);
	printf("%d
%s
",a,b);

	return 0;
}
123
abcd

strchr字符查找

#include <string.h>

char * strchr(const char *str,int val);
功能:在str中寻找val第一次出现的位置
参数:
    str:被查找的字符串首地址
    val:匹配字符
返回:
    成功:val第一次出现的地址
    失败:NULL

例:

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

int main(int argc, char *argv[])
{
	printf("请输入一个字符串:");
	char s[32];
	scanf("%s",s);
	getchar();
	printf("请输入要查找的字符:");
	char val;
	val = getchar();
	getchar();
	char *ret = NULL;
	ret = strchr(s,val);
	if (ret == NULL)
	{
		printf("未找到%c
",val);
	}
	else
	{
		printf("地址:%p
位置:%d
",ret,(ret-s));
	}

	return 0;
}
PS D:> ./main   
请输入一个字符串:abcdf
请输入要查找的字符:f
地址:0060FE7C
位置:4

PS D:> ./main
请输入一个字符串:ac
请输入要查找的字符:d
未找到d

例2:

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

int main(int argc, char *argv[])
{
	char s[32] = "aebecede";
	char *buf = &s[0];
	char *ret = NULL;
	while (ret = strchr(buf,'e'))
	{
		printf("地址:%#d
",ret);
		*ret = '@';
		buf = ret + 1;
	}
	printf("%s
",s);

	return 0;
}
地址:6356601
地址:6356603
地址:6356605
地址:6356607
a@b@c@d@

strstr字符串查找

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

int main(int argc, char *argv[])
{
	printf("请输入一个字符串:");
	char s[32];
	scanf("%s",s);
	getchar();
	printf("请输入要查找的字符串:");
	char val[32];
	scanf("%s",val);
	getchar();
	char *ret = NULL;
	ret = strstr(s,val);
	if (ret == NULL)
	{
		printf("未找到%c
",val);
	}
	else
	{
		printf("地址:%p
位置:%d
",ret,(ret-s));
	}

	return 0;
}
请输入一个字符串:abHelloc
请输入要查找的字符串:Hello
地址:0060FE7E
位置:2
原文地址:https://www.cnblogs.com/zhujiangyu/p/13693905.html