目录
❶ 头文件 string.h 中字符串函数
1/9 strlen()
2/9 strcat()和strncat()
3/9 strcpy()和strncpy()
4/9 strcmp()和strncmp()
5/9 strstr()
5/9 strchr()
6/9 memcpy()
7/9 memcmp()
8/9 memset()
备注:
本文代码均在 Visual Stdio 2022_IDE 中完成。
本人尚且新手,文章为学习笔记,非教学使用。
本文若有不当,恳请大佬指正,在此再三感谢。
本人会在后续不断改正错误,逐步完善知识点。
❶ 头文件 string.h 中字符串函数
string.h是C语言里面关于字符数组的函数定义的头文件。
1/9 strlen()
函数名称:strlen()
函数功能:求字符串长度,当首次遇到' '时停止计算,包括' '。返回长度。
函数原型:
size_t __cdecl strlen(const char *_Str)
函数参数:
Str -- 要求长度的目标字符串。
函数示例:
#include
#include
int main(void)
{
char* strp1="y1x2";
char stra1[]=" 7733 ab";
int i=sizeof(strp1)-1;
int j=strlen(stra1);
printf(" %-5s| %-5sn",strp1,stra1);
printf(" %-5u| %-5un",i,j);
return 0;
}
注意事项:
① 从首元素地址遇到' '为止;
② 8进制写法: 77为十进制63为字符'?';
③ 指针指向的字符串不能用strlen(),strlen(指针)=4或8(32位64位系统)。
2/9 strcat()和strncat()
函数名称:strcat()
函数功能:将两个字符串拼接在一起。
函数原型:
char *__cdecl strcat(char *_Dest, const char *_Src)
函数参数:
Dest -- 指向目标字符数组,该数组足够容纳追加后的字符串,包括额外的空字符。
Src -- 要追加的字符串。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char stra1[7] = "y1x2";
char* strp1 = "33";
printf(" %-7s| %-7sn", stra1, strp1);
strcat(stra1, strp1);
printf(" %-7s|n", stra1);
return 0;
}
函数名称:strncat()
函数功能:将src所指字符串前n项元素拼接追加在dest所指字符串之后。
函数原型:
char *__cdecl strncat(char *_Dest, const char *_Src, size_t _Count)
函数参数:
Dest -- 指向目标字符数组,该数组足够容纳追加后的字符串,包括额外的空字符。
Src -- 要追加的字符串。
Count -- 要追加的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char stra1[9] = "y1x2";
char* strp1 = "33";
char* strp2 = "777";
printf(" %-9s| %-9sn", stra1, strp1);
strcat(stra1, strp1);
printf(" %-9s| %-9sn", stra1, strp2);
strncat(stra1, strp2, 2);
printf(" %-9s|n", stra1);
return 0;
}
注意事项:
被拼接字符串数组stra1必须给定大小且足够大,否则拼接会造成内存越界。
3/9 strcpy()和strncpy()
函数名称:strcpy()
函数功能:拷贝一个字符串到另一个。
函数原型:
char *__cdecl strcpy(char *_Dest, const char *_Src)
函数参数:
Dest -- 指向用于存储复制内容的目标数组。
Src -- 要复制的字符串。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char stra1[5] = "33";
char* strp1 = "y1x2";
printf(" %-5s| %-5sn", stra1,strp1 );
strcpy(stra1, strp1);
printf(" %-5s| %-5sn", stra1, strp1);
return 0;
}
函数名称:strncpy()
函数功能:将字符串src中n个字符拷贝到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才停止复制),返回指向dest的指针。
函数原型:
char *__cdecl strcpy(char *_Dest, const char *_Src, size_t _Count)
函数参数:
Dest -- 指向用于存储复制内容的目标数组。
Src -- 要复制的字符串。
Count -- 要复制的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char* strp1 = "y1x2";
char stra1[5] = "333";
char stra2[] = "666";
printf(" %-5s| %-5sn", stra1, strp1);
strcpy(stra1, strp1);
printf(" %-5s| %-5sn", stra1, strp1);
strncpy(stra1, stra2, 2);
printf(" %-5s| %-5sn", stra1, stra2);
return 0;
}
注意事项:
① 拷贝的字符串stra1必须给定大小且足够大;
② 拷贝从首元素到第n元素,有元素的覆盖,没有的添加。
4/9 strcmp()和strncmp()
函数名称:strcmp()
函数功能:比较两个字符串。依次逐个字符相比较(按ASCII值比较大小),如:str1="abcde",str2="ABCDE",'a'=97,'A'=65。 97-65 = 32 > 0,strcmp(str1,str2) =1,则返回str1大于str2。若差值为0大小相同,则比较下一位,直到遇到不同字符或字符' '为止,最后也一样,则str1等于str2。
strcmp(str1,str2) > 0:str1 大于 str2;
strcmp(str1,str2) = 0:str1 等于 str2;
strcmp(str1,str2) < 0:str1 小于 str2。
函数原型:
int __cdecl strcmp(const char *_Str1, const char *_Str2)
函数参数:
Str1 -- 比较的第一个字符串。
Str2 -- 比较的第二个字符串。
函数示例:
#include
#include
int main(void)
{
int i, j, k;
char* strp1 = "abcde";
char stra1[] = "Abcde";
char stra2[10] = "abcdef";
char stra3[] = "abcde";
printf(" t%-5sn", strp1);
printf(" %-5s| %-5s| %-5sn", stra1, stra2, stra3);
i = strcmp(strp1, stra1);
j = strcmp(strp1, stra2);
k = strcmp(strp1, stra3);
(i > 0) ? printf(" i = %2d > 0, strp1 大于 stra1n", i) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1 小于 stra2n", j) : 6;
(k == 0) ? printf(" k = %2d = 0, strp1 等于 stra3n", k) : 6;
return 0;
}
函数名称:strncmp()
函数功能:比较两个字符串。依次比较前MaxCount项,原理同strcmp()。
函数原型:
int __cdecl strncmp(const char *_Str1, const char *_Str2, size_t _MaxCount)
函数参数:
Str1 -- 比较的第一个字符串。
Str2 -- 比较的第二个字符串。
MaxCount -- 比较的最大字符数。
函数示例:
#include
#include
int main(void)
{
int i, j;
char* strp1 = "abcde";
char stra1[] = "abcdef";
printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
i = strcmp(strp1, stra1);
j = strcmp(strp1, stra1,4);
(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
return 0;
}
5/9 strstr()
函数名称:strstr()
函数功能:检索子串在字符串中首次出现的位置,返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回(NULL)。
函数原型:
char *__cdecl strstr(const char *_Str, const char *_SubStr)
函数参数:
Str -- 要被检索的字符串。
SubStr -- 要检索的字串。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char stra1[3] = "x2";
char stra2[4] = "666";
printf(" %-5s| %-5s| %-5sn", strp1, stra1, stra2);
strstr(strp1, stra1);
printf(" strstr(strp1, stra1) = %sn", strstr(strp1, stra1));
strstr(strp1, stra2);
printf(" strstr(strp1, stra2) = %sn", strstr(strp1, stra2));
return 0;
}
函数应用:
5/9 strchr()
函数名称:strchr()
函数功能:在一个串中查找给定字符的第一个匹配之处。返回在字符串 str 中第一次出现字符c的地址,如果未找到该字符则返回(NULL)。
函数原型:
char *__cdecl strchr(const char *_Str, int _Val)
函数参数:
Str -- 被检索的字符串。
Val -- 要检索的字符。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char c1 = 'x';
char c2 = '6';
char* ret1, ret2;
printf(" %-5s| %c | %cn", strp1, c1, c2);
ret1 = strchr(strp1, c1);
printf(" strchr(strp1, c1) = %sn", ret1);
ret2 = strchr(strp1, '6');
printf(" strchr(strp1, c2) = %sn", ret2);
return 0;
}
函数应用:
6/9 memcpy()
函数名称:memcpy()
函数功能:从串str2复制n个字符到str1。
函数原型:
void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size)
函数参数:
Dst -- 存复制内容目标数组,类型强转成void *指针。
Src -- 被复制的源字符串,类型强转成void *指针。
Size -- 被复制的字节数。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char stra1[9] = "66";
char stra2[9] = "rtyxz";
printf(" %-6s| %-6s| %-6sn", stra1, stra2, strp1);
memcpy(stra1, strp1, strlen(strp1)+1);
printf(" %-9sn", stra1);
memcpy(stra2, strp1 + 2, 4);
printf(" %-9sn", stra2);
return 0;
}
函数应用:
7/9 memcmp()
函数名称:memcmp()
函数功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
函数原型:
int __cdecl memcmp(const void *_Buf1, const void *_Buf2, size_t _Size)
函数参数:
str1 -- 指向内存块的指针。
str2 -- 指向内存块的指针。
n -- 要被比较的字节数。
函数示例:
#include
#include
int main(void)
{
int i, j;
char* strp1 = "abcde";
char stra1[] = "abcdef";
printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
i = memcmp(strp1, stra1, strlen(strp1)+1);
j = memcmp(strp1, stra1, 4);
(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
return 0;
}
函数应用:
8/9 memset()
函数名称:memset()
函数功能:复制一个字符到参数Dst所指向的字符串的前Size个字符。该值返回一个指向存储区 str 的指针。
函数原型:
void *__cdecl memset(void *_Dst, int _Val, size_t _Size)
函数参数:
Dst -- 指要填充的内存块。
Val -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
Size -- 要被设置为该值的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char str[50];
strcpy(str, "Be a person of your word");
puts(str);
memset(str, '@', 11);
puts(str);
return(0);
}
函数应用:
函数名称:strlen()
函数功能:求字符串长度,当首次遇到' '时停止计算,包括' '。返回长度。
函数原型:
size_t __cdecl strlen(const char *_Str)
函数参数:
Str -- 要求长度的目标字符串。
函数示例:
#include#include int main(void) { char* strp1="y1x2"; char stra1[]=" 7733 ab"; int i=sizeof(strp1)-1; int j=strlen(stra1); printf(" %-5s| %-5sn",strp1,stra1); printf(" %-5u| %-5un",i,j); return 0; }
注意事项:
① 从首元素地址遇到' '为止;
② 8进制写法: 77为十进制63为字符'?';
③ 指针指向的字符串不能用strlen(),strlen(指针)=4或8(32位64位系统)。
函数名称:strcat()
函数功能:将两个字符串拼接在一起。
函数原型:
char *__cdecl strcat(char *_Dest, const char *_Src)函数参数:
Dest -- 指向目标字符数组,该数组足够容纳追加后的字符串,包括额外的空字符。
Src -- 要追加的字符串。
函数示例:
#define _CRT_SECURE_NO_WARNINGS #include#include int main(void) { char stra1[7] = "y1x2"; char* strp1 = "33"; printf(" %-7s| %-7sn", stra1, strp1); strcat(stra1, strp1); printf(" %-7s|n", stra1); return 0; }
函数名称:strncat()
函数功能:将src所指字符串前n项元素拼接追加在dest所指字符串之后。
函数原型:
char *__cdecl strncat(char *_Dest, const char *_Src, size_t _Count)函数参数:
Dest -- 指向目标字符数组,该数组足够容纳追加后的字符串,包括额外的空字符。
Src -- 要追加的字符串。
Count -- 要追加的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS #include#include int main(void) { char stra1[9] = "y1x2"; char* strp1 = "33"; char* strp2 = "777"; printf(" %-9s| %-9sn", stra1, strp1); strcat(stra1, strp1); printf(" %-9s| %-9sn", stra1, strp2); strncat(stra1, strp2, 2); printf(" %-9s|n", stra1); return 0; } 注意事项:
被拼接字符串数组stra1必须给定大小且足够大,否则拼接会造成内存越界。
3/9 strcpy()和strncpy()
函数名称:strcpy()
函数功能:拷贝一个字符串到另一个。
函数原型:
char *__cdecl strcpy(char *_Dest, const char *_Src)
函数参数:
Dest -- 指向用于存储复制内容的目标数组。
Src -- 要复制的字符串。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char stra1[5] = "33";
char* strp1 = "y1x2";
printf(" %-5s| %-5sn", stra1,strp1 );
strcpy(stra1, strp1);
printf(" %-5s| %-5sn", stra1, strp1);
return 0;
}
函数名称:strncpy()
函数功能:将字符串src中n个字符拷贝到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才停止复制),返回指向dest的指针。
函数原型:
char *__cdecl strcpy(char *_Dest, const char *_Src, size_t _Count)
函数参数:
Dest -- 指向用于存储复制内容的目标数组。
Src -- 要复制的字符串。
Count -- 要复制的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char* strp1 = "y1x2";
char stra1[5] = "333";
char stra2[] = "666";
printf(" %-5s| %-5sn", stra1, strp1);
strcpy(stra1, strp1);
printf(" %-5s| %-5sn", stra1, strp1);
strncpy(stra1, stra2, 2);
printf(" %-5s| %-5sn", stra1, stra2);
return 0;
}
注意事项:
① 拷贝的字符串stra1必须给定大小且足够大;
② 拷贝从首元素到第n元素,有元素的覆盖,没有的添加。
4/9 strcmp()和strncmp()
函数名称:strcmp()
函数功能:比较两个字符串。依次逐个字符相比较(按ASCII值比较大小),如:str1="abcde",str2="ABCDE",'a'=97,'A'=65。 97-65 = 32 > 0,strcmp(str1,str2) =1,则返回str1大于str2。若差值为0大小相同,则比较下一位,直到遇到不同字符或字符' '为止,最后也一样,则str1等于str2。
strcmp(str1,str2) > 0:str1 大于 str2;
strcmp(str1,str2) = 0:str1 等于 str2;
strcmp(str1,str2) < 0:str1 小于 str2。
函数原型:
int __cdecl strcmp(const char *_Str1, const char *_Str2)
函数参数:
Str1 -- 比较的第一个字符串。
Str2 -- 比较的第二个字符串。
函数示例:
#include
#include
int main(void)
{
int i, j, k;
char* strp1 = "abcde";
char stra1[] = "Abcde";
char stra2[10] = "abcdef";
char stra3[] = "abcde";
printf(" t%-5sn", strp1);
printf(" %-5s| %-5s| %-5sn", stra1, stra2, stra3);
i = strcmp(strp1, stra1);
j = strcmp(strp1, stra2);
k = strcmp(strp1, stra3);
(i > 0) ? printf(" i = %2d > 0, strp1 大于 stra1n", i) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1 小于 stra2n", j) : 6;
(k == 0) ? printf(" k = %2d = 0, strp1 等于 stra3n", k) : 6;
return 0;
}
函数名称:strncmp()
函数功能:比较两个字符串。依次比较前MaxCount项,原理同strcmp()。
函数原型:
int __cdecl strncmp(const char *_Str1, const char *_Str2, size_t _MaxCount)
函数参数:
Str1 -- 比较的第一个字符串。
Str2 -- 比较的第二个字符串。
MaxCount -- 比较的最大字符数。
函数示例:
#include
#include
int main(void)
{
int i, j;
char* strp1 = "abcde";
char stra1[] = "abcdef";
printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
i = strcmp(strp1, stra1);
j = strcmp(strp1, stra1,4);
(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
return 0;
}
5/9 strstr()
函数名称:strstr()
函数功能:检索子串在字符串中首次出现的位置,返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回(NULL)。
函数原型:
char *__cdecl strstr(const char *_Str, const char *_SubStr)
函数参数:
Str -- 要被检索的字符串。
SubStr -- 要检索的字串。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char stra1[3] = "x2";
char stra2[4] = "666";
printf(" %-5s| %-5s| %-5sn", strp1, stra1, stra2);
strstr(strp1, stra1);
printf(" strstr(strp1, stra1) = %sn", strstr(strp1, stra1));
strstr(strp1, stra2);
printf(" strstr(strp1, stra2) = %sn", strstr(strp1, stra2));
return 0;
}
函数应用:
5/9 strchr()
函数名称:strchr()
函数功能:在一个串中查找给定字符的第一个匹配之处。返回在字符串 str 中第一次出现字符c的地址,如果未找到该字符则返回(NULL)。
函数原型:
char *__cdecl strchr(const char *_Str, int _Val)
函数参数:
Str -- 被检索的字符串。
Val -- 要检索的字符。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char c1 = 'x';
char c2 = '6';
char* ret1, ret2;
printf(" %-5s| %c | %cn", strp1, c1, c2);
ret1 = strchr(strp1, c1);
printf(" strchr(strp1, c1) = %sn", ret1);
ret2 = strchr(strp1, '6');
printf(" strchr(strp1, c2) = %sn", ret2);
return 0;
}
函数应用:
6/9 memcpy()
函数名称:memcpy()
函数功能:从串str2复制n个字符到str1。
函数原型:
void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size)
函数参数:
Dst -- 存复制内容目标数组,类型强转成void *指针。
Src -- 被复制的源字符串,类型强转成void *指针。
Size -- 被复制的字节数。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char stra1[9] = "66";
char stra2[9] = "rtyxz";
printf(" %-6s| %-6s| %-6sn", stra1, stra2, strp1);
memcpy(stra1, strp1, strlen(strp1)+1);
printf(" %-9sn", stra1);
memcpy(stra2, strp1 + 2, 4);
printf(" %-9sn", stra2);
return 0;
}
函数应用:
7/9 memcmp()
函数名称:memcmp()
函数功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
函数原型:
int __cdecl memcmp(const void *_Buf1, const void *_Buf2, size_t _Size)
函数参数:
str1 -- 指向内存块的指针。
str2 -- 指向内存块的指针。
n -- 要被比较的字节数。
函数示例:
#include
#include
int main(void)
{
int i, j;
char* strp1 = "abcde";
char stra1[] = "abcdef";
printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
i = memcmp(strp1, stra1, strlen(strp1)+1);
j = memcmp(strp1, stra1, 4);
(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
return 0;
}
函数应用:
8/9 memset()
函数名称:memset()
函数功能:复制一个字符到参数Dst所指向的字符串的前Size个字符。该值返回一个指向存储区 str 的指针。
函数原型:
void *__cdecl memset(void *_Dst, int _Val, size_t _Size)
函数参数:
Dst -- 指要填充的内存块。
Val -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
Size -- 要被设置为该值的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char str[50];
strcpy(str, "Be a person of your word");
puts(str);
memset(str, '@', 11);
puts(str);
return(0);
}
函数应用:
函数名称:strcpy()
函数功能:拷贝一个字符串到另一个。
函数原型:
char *__cdecl strcpy(char *_Dest, const char *_Src)
函数参数:
Dest -- 指向用于存储复制内容的目标数组。
Src -- 要复制的字符串。
函数示例:
#define _CRT_SECURE_NO_WARNINGS #include#include int main(void) { char stra1[5] = "33"; char* strp1 = "y1x2"; printf(" %-5s| %-5sn", stra1,strp1 ); strcpy(stra1, strp1); printf(" %-5s| %-5sn", stra1, strp1); return 0; }
函数名称:strncpy()
函数功能:将字符串src中n个字符拷贝到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才停止复制),返回指向dest的指针。
函数原型:
char *__cdecl strcpy(char *_Dest, const char *_Src, size_t _Count)
函数参数:
Dest -- 指向用于存储复制内容的目标数组。
Src -- 要复制的字符串。
Count -- 要复制的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS #include#include int main(void) { char* strp1 = "y1x2"; char stra1[5] = "333"; char stra2[] = "666"; printf(" %-5s| %-5sn", stra1, strp1); strcpy(stra1, strp1); printf(" %-5s| %-5sn", stra1, strp1); strncpy(stra1, stra2, 2); printf(" %-5s| %-5sn", stra1, stra2); return 0; }
注意事项:
① 拷贝的字符串stra1必须给定大小且足够大;
② 拷贝从首元素到第n元素,有元素的覆盖,没有的添加。
函数名称:strcmp()
函数功能:比较两个字符串。依次逐个字符相比较(按ASCII值比较大小),如:str1="abcde",str2="ABCDE",'a'=97,'A'=65。 97-65 = 32 > 0,strcmp(str1,str2) =1,则返回str1大于str2。若差值为0大小相同,则比较下一位,直到遇到不同字符或字符' '为止,最后也一样,则str1等于str2。
strcmp(str1,str2) > 0:str1 大于 str2;
strcmp(str1,str2) = 0:str1 等于 str2;
strcmp(str1,str2) < 0:str1 小于 str2。
函数原型:
int __cdecl strcmp(const char *_Str1, const char *_Str2)函数参数:
Str1 -- 比较的第一个字符串。
Str2 -- 比较的第二个字符串。
函数示例:
#include#include int main(void) { int i, j, k; char* strp1 = "abcde"; char stra1[] = "Abcde"; char stra2[10] = "abcdef"; char stra3[] = "abcde"; printf(" t%-5sn", strp1); printf(" %-5s| %-5s| %-5sn", stra1, stra2, stra3); i = strcmp(strp1, stra1); j = strcmp(strp1, stra2); k = strcmp(strp1, stra3); (i > 0) ? printf(" i = %2d > 0, strp1 大于 stra1n", i) : 6; (j < 0) ? printf(" j = %2d < 0, strp1 小于 stra2n", j) : 6; (k == 0) ? printf(" k = %2d = 0, strp1 等于 stra3n", k) : 6; return 0; }
函数名称:strncmp()
函数功能:比较两个字符串。依次比较前MaxCount项,原理同strcmp()。
函数原型:
int __cdecl strncmp(const char *_Str1, const char *_Str2, size_t _MaxCount)函数参数:
Str1 -- 比较的第一个字符串。
Str2 -- 比较的第二个字符串。
MaxCount -- 比较的最大字符数。
函数示例:
#include#include int main(void) { int i, j; char* strp1 = "abcde"; char stra1[] = "abcdef"; printf(" strp1="%s"| stra1="%s"n", strp1, stra1); i = strcmp(strp1, stra1); j = strcmp(strp1, stra1,4); (i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6; (i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6; (i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6; (j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6; (j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6; (j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6; return 0; }
5/9 strstr()
函数名称:strstr()
函数功能:检索子串在字符串中首次出现的位置,返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回(NULL)。
函数原型:
char *__cdecl strstr(const char *_Str, const char *_SubStr)
函数参数:
Str -- 要被检索的字符串。
SubStr -- 要检索的字串。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char stra1[3] = "x2";
char stra2[4] = "666";
printf(" %-5s| %-5s| %-5sn", strp1, stra1, stra2);
strstr(strp1, stra1);
printf(" strstr(strp1, stra1) = %sn", strstr(strp1, stra1));
strstr(strp1, stra2);
printf(" strstr(strp1, stra2) = %sn", strstr(strp1, stra2));
return 0;
}
函数应用:
5/9 strchr()
函数名称:strchr()
函数功能:在一个串中查找给定字符的第一个匹配之处。返回在字符串 str 中第一次出现字符c的地址,如果未找到该字符则返回(NULL)。
函数原型:
char *__cdecl strchr(const char *_Str, int _Val)
函数参数:
Str -- 被检索的字符串。
Val -- 要检索的字符。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char c1 = 'x';
char c2 = '6';
char* ret1, ret2;
printf(" %-5s| %c | %cn", strp1, c1, c2);
ret1 = strchr(strp1, c1);
printf(" strchr(strp1, c1) = %sn", ret1);
ret2 = strchr(strp1, '6');
printf(" strchr(strp1, c2) = %sn", ret2);
return 0;
}
函数应用:
6/9 memcpy()
函数名称:memcpy()
函数功能:从串str2复制n个字符到str1。
函数原型:
void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size)
函数参数:
Dst -- 存复制内容目标数组,类型强转成void *指针。
Src -- 被复制的源字符串,类型强转成void *指针。
Size -- 被复制的字节数。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char stra1[9] = "66";
char stra2[9] = "rtyxz";
printf(" %-6s| %-6s| %-6sn", stra1, stra2, strp1);
memcpy(stra1, strp1, strlen(strp1)+1);
printf(" %-9sn", stra1);
memcpy(stra2, strp1 + 2, 4);
printf(" %-9sn", stra2);
return 0;
}
函数应用:
7/9 memcmp()
函数名称:memcmp()
函数功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
函数原型:
int __cdecl memcmp(const void *_Buf1, const void *_Buf2, size_t _Size)
函数参数:
str1 -- 指向内存块的指针。
str2 -- 指向内存块的指针。
n -- 要被比较的字节数。
函数示例:
#include
#include
int main(void)
{
int i, j;
char* strp1 = "abcde";
char stra1[] = "abcdef";
printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
i = memcmp(strp1, stra1, strlen(strp1)+1);
j = memcmp(strp1, stra1, 4);
(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
return 0;
}
函数应用:
8/9 memset()
函数名称:memset()
函数功能:复制一个字符到参数Dst所指向的字符串的前Size个字符。该值返回一个指向存储区 str 的指针。
函数原型:
void *__cdecl memset(void *_Dst, int _Val, size_t _Size)
函数参数:
Dst -- 指要填充的内存块。
Val -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
Size -- 要被设置为该值的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char str[50];
strcpy(str, "Be a person of your word");
puts(str);
memset(str, '@', 11);
puts(str);
return(0);
}
函数应用:
函数名称:strstr()
函数功能:检索子串在字符串中首次出现的位置,返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回(NULL)。
函数原型:
char *__cdecl strstr(const char *_Str, const char *_SubStr)
函数参数:
Str -- 要被检索的字符串。
SubStr -- 要检索的字串。
函数示例:
#include#include int main(void) { char* strp1 = "y1x233"; char stra1[3] = "x2"; char stra2[4] = "666"; printf(" %-5s| %-5s| %-5sn", strp1, stra1, stra2); strstr(strp1, stra1); printf(" strstr(strp1, stra1) = %sn", strstr(strp1, stra1)); strstr(strp1, stra2); printf(" strstr(strp1, stra2) = %sn", strstr(strp1, stra2)); return 0; }
函数应用:
函数名称:strchr()
函数功能:在一个串中查找给定字符的第一个匹配之处。返回在字符串 str 中第一次出现字符c的地址,如果未找到该字符则返回(NULL)。
函数原型:
char *__cdecl strchr(const char *_Str, int _Val)函数参数:
Str -- 被检索的字符串。
Val -- 要检索的字符。
函数示例:
#include#include int main(void) { char* strp1 = "y1x233"; char c1 = 'x'; char c2 = '6'; char* ret1, ret2; printf(" %-5s| %c | %cn", strp1, c1, c2); ret1 = strchr(strp1, c1); printf(" strchr(strp1, c1) = %sn", ret1); ret2 = strchr(strp1, '6'); printf(" strchr(strp1, c2) = %sn", ret2); return 0; } 函数应用:
6/9 memcpy()
函数名称:memcpy()
函数功能:从串str2复制n个字符到str1。
函数原型:
void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size)
函数参数:
Dst -- 存复制内容目标数组,类型强转成void *指针。
Src -- 被复制的源字符串,类型强转成void *指针。
Size -- 被复制的字节数。
函数示例:
#include
#include
int main(void)
{
char* strp1 = "y1x233";
char stra1[9] = "66";
char stra2[9] = "rtyxz";
printf(" %-6s| %-6s| %-6sn", stra1, stra2, strp1);
memcpy(stra1, strp1, strlen(strp1)+1);
printf(" %-9sn", stra1);
memcpy(stra2, strp1 + 2, 4);
printf(" %-9sn", stra2);
return 0;
}
函数应用:
7/9 memcmp()
函数名称:memcmp()
函数功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
函数原型:
int __cdecl memcmp(const void *_Buf1, const void *_Buf2, size_t _Size)
函数参数:
str1 -- 指向内存块的指针。
str2 -- 指向内存块的指针。
n -- 要被比较的字节数。
函数示例:
#include
#include
int main(void)
{
int i, j;
char* strp1 = "abcde";
char stra1[] = "abcdef";
printf(" strp1="%s"| stra1="%s"n", strp1, stra1);
i = memcmp(strp1, stra1, strlen(strp1)+1);
j = memcmp(strp1, stra1, 4);
(i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6;
(i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6;
(i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6;
(j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6;
(j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6;
(j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6;
return 0;
}
函数应用:
8/9 memset()
函数名称:memset()
函数功能:复制一个字符到参数Dst所指向的字符串的前Size个字符。该值返回一个指向存储区 str 的指针。
函数原型:
void *__cdecl memset(void *_Dst, int _Val, size_t _Size)
函数参数:
Dst -- 指要填充的内存块。
Val -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
Size -- 要被设置为该值的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char str[50];
strcpy(str, "Be a person of your word");
puts(str);
memset(str, '@', 11);
puts(str);
return(0);
}
函数应用:
函数名称:memcpy()
函数功能:从串str2复制n个字符到str1。
函数原型:
void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size)
函数参数:
Dst -- 存复制内容目标数组,类型强转成void *指针。
Src -- 被复制的源字符串,类型强转成void *指针。
Size -- 被复制的字节数。
函数示例:
#include#include int main(void) { char* strp1 = "y1x233"; char stra1[9] = "66"; char stra2[9] = "rtyxz"; printf(" %-6s| %-6s| %-6sn", stra1, stra2, strp1); memcpy(stra1, strp1, strlen(strp1)+1); printf(" %-9sn", stra1); memcpy(stra2, strp1 + 2, 4); printf(" %-9sn", stra2); return 0; }
函数应用:
函数名称:memcmp()
函数功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
函数原型:
int __cdecl memcmp(const void *_Buf1, const void *_Buf2, size_t _Size)函数参数:
str1 -- 指向内存块的指针。
str2 -- 指向内存块的指针。
n -- 要被比较的字节数。
函数示例:
#include#include int main(void) { int i, j; char* strp1 = "abcde"; char stra1[] = "abcdef"; printf(" strp1="%s"| stra1="%s"n", strp1, stra1); i = memcmp(strp1, stra1, strlen(strp1)+1); j = memcmp(strp1, stra1, 4); (i > 0) ? printf(" i = %2d > 0, strp1t大于 stra1n", i) : 6; (i < 0) ? printf(" i = %2d < 0, strp1t小于 stra1n", i) : 6; (i == 0) ? printf(" i = %2d = 0, strp1t等于 stra1n", i) : 6; (j > 0) ? printf(" j = %2d > 0, strp1前4项 大于 stra1前4项n", j) : 6; (j < 0) ? printf(" j = %2d < 0, strp1前4项 小于 stra1前4项n", j) : 6; (j == 0) ? printf(" j = %2d = 0, strp1前4项 等于 stra1前4项n", j) : 6; return 0; } 函数应用:
8/9 memset()
函数名称:memset()
函数功能:复制一个字符到参数Dst所指向的字符串的前Size个字符。该值返回一个指向存储区 str 的指针。
函数原型:
void *__cdecl memset(void *_Dst, int _Val, size_t _Size)
函数参数:
Dst -- 指要填充的内存块。
Val -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
Size -- 要被设置为该值的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main(void)
{
char str[50];
strcpy(str, "Be a person of your word");
puts(str);
memset(str, '@', 11);
puts(str);
return(0);
}
函数应用:
函数名称:memset()
函数功能:复制一个字符到参数Dst所指向的字符串的前Size个字符。该值返回一个指向存储区 str 的指针。
函数原型:
void *__cdecl memset(void *_Dst, int _Val, size_t _Size)
函数参数:
Dst -- 指要填充的内存块。
Val -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
Size -- 要被设置为该值的字符数。
函数示例:
#define _CRT_SECURE_NO_WARNINGS #include#include int main(void) { char str[50]; strcpy(str, "Be a person of your word"); puts(str); memset(str, '@', 11); puts(str); return(0); }
函数应用:
2.stdlib.h中字符串与数字相互转换处理函数
1. 数字转化为字符串:
itoa():将整型值转换为字符串。
ltoa():将长整型值转换为字符串。
ultoa():将无符号长整型值转换为字符串。
gcvt():将浮点型数转换为字符串,取四舍五入。
ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
fcvt():指定位数为转换精度,其余同ecvt()。



