C语言字符篇(二)字符串处理函数
字符串处理函数
1. 拷贝 strcpy
2. 追加 strcat
#include <string.h> | |
char *strcpy(char *dest, const char *src); | 将字符串src 复制到字符数组 dest |
char *strncpy(char *dest, const char *src, size_t n); | 将字符串src开始的 n个字节复制到字符数组dest |
char *strcat(char *dest, const char *src); |
将字符串src接在字符串数组dest的后面 |
char *strncat(char *dest, const char *src, size_t n); | 将字符串src开始的n个字符接在字符串数组的dest后面 |
字符串拷贝有三要素:
1.从哪里拷贝
2.拷贝到哪里去
3.拷贝多少空间?
strcpy是不安全的,因为它是以'\0'作为拷贝的结束符,并没有规定拷贝的大小,因此会造成内存泄漏.
所以后来在 strcpy 的基础上,追加了strncpy
strcpy是将一个字符串拷贝给另一个空间
strncpy 是在此基础上规定拷贝字符串的大小.如果没有规定大小,将一个无线大的字符串拷贝给内存,将造成重要资料崩溃.
解读:
char *strncpy(char *dest, const char *src, size_t n);
首先看参数:
拷贝到那里去: char *dest 说明这是一个允许修改的字符串指针.也确实是这样.
从哪里拷贝: const char *src 这是一个不允许修改的字符串指针,这样设计是合理的,我们不希望将一个字符串拷贝给另一个字符串后,原来的字符串给没了.所以const保护是正确的
拷贝多少: size_t n xxx_t 是 typedef的标志,反正就是长度的意思,这个参数规定了要拷贝字符串的大小.
然后看返回值:
The strcat() and strncat() functions return a pointer to the resulting string dest.
char *返回的是dest的指针.
char *strncpy(char *dest, const char *src, size_t n);
-------------------------------------------------------
int main(int argc, char **argv) {
const char *src="hello strncpy";
char dest[100];
strncpy(dest,src,strlen(src)); //将src里面的字符串拷贝到dest,strlen将记录不包括'\0'的字符串实际长度,因此在结尾手动补零
dest[strlen(src)]=0; //在字符串后面补0
printf("i am src: %s\n",src); //hello strncpy
printf("i am dest: %s\n",dest); //hello strncpy
}
-------------------------------------------------------
char *strncat(char *dest, const char *src, size_t n);
-------------------------------------------------------
int main(int argc, char **argv) {
const char *str1="strcat";
char buf[100]={"hello,"};
strncat(buf,str1,strlen(str1));
printf("%s\n",buf); //hello,strcast
}
-------------------------------------------------------