关于字符串常考函数

来源:互联网 发布:abc谋杀案知乎 编辑:程序博客网 时间:2024/05/18 02:38

1、strcpy

原型声明:char *strcpy(char* dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char *str = "hello";char *str1 = (char *)malloc(100);strcpy(str1,str);printf("%s",str1);return 0;}


2、strstr

头文件:#include <string.h

功能:搜索一个字符串在另一个字符串中的第一次出现。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,则返回NULL

strstr(string,search) : string:规定被搜索的字符串。search:规定所搜索的字符串

#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char *str = "hello";char *str1 = "I say hello xiaopang";char *p = strstr(str1,str);printf("%s",p);return 0;}


3、strcat

头文件:#include <string.h

功能:将两个char类型链接

原型:char *strcat(char *dest,char *src); 把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'

#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char *str = "hello";char *str1 = "I say hello xiaopang";strcat(str1,str);printf("%s\n",str1);return 0;}
输出错误,把str接在str1后面,必须保证str1空间足够大,可以方向两个字符串的长度和


#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char *str= "hello";char str1[100] = "I say hello xiaopang ";strcat(str1,str);printf("%s\n",str1);return 0;}
此时输出正确


4、memset

头文件:<memory.h>或<string.h>

void *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char str[10]= "hello";printf("%s\n",str);memset(str,'\0',strlen(str));printf("%d,%d,%d,%d\n",str[0],str[1],str[9]);return 0;}


5、memcpy

功能:memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。函数返回指向dest的指针

头文件:#include<string.h>

void *memcpy(void *dest, const void *src, size_t n);

#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char str[10]= "hello";char str1[10] = "123";void *p = memcpy(str1,str,sizeof(char)*6);printf("%s\n%s\n",str1,p);return 0;}

6、puts

puts()函数用来向标准输出设备(屏幕)写字符串并换行

(1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。
(2). 可以将字符串直接写入puts()函数中。如:
puts("Hello, world!");
(3). puts 和 printf 的用法一样,puts()函数的作用与语句“printf("%s\n",s);的作用相同。注意:puts在输出字 符串后会自动输出一个回车符。
#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char str[10]= "hello";char *p = "xiaopang";puts(str);puts(p);return 0;}
7、gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入
<span style="font-family: arial, 宋体, sans-serif; text-indent: 2em; background-color: initial;">了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。</span>
也就是说:gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行。
#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char str[10];char str1[10];gets(str);//可以接收空格scanf("%s",str1);//空格后内容不再接收puts(str);puts(str1);return 0;}
8、sprintf
字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数

头文件 stdio.h

原型

int sprintf( char *buffer, const char *format, [ argument] … );

参数列表

buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
返回值:字符串长度(strlen)
#include <stdio.h>int main(){char *str;sprintf(str,"%d",12);return 0;}
错误,没有为str申请空间

#include <stdio.h>#include <stdlib.h>int main(){char *str = (char *)malloc(100);char str1[20];sprintf(str,"%d",12);sprintf(str1, "%-4d %d",12,1234);printf("%s\n",str);printf("%s",str1);return 0;}

9、sscanf

sscanf() - 从一个字符串中读进与指定格式相符的数据。

#include <stdio.h>#include <stdlib.h>int main(){char *str = "0123456789";char buffer[10];sscanf(str,"%5s",buffer);puts(buffer);return 0;}




0 0