C语言规定:如果字符型数组的末尾包含了空字符\0,(也就是0), 那么该数组的内容就是一个字符串。
因为字符串需要用0结尾,所以在声明字符数组的时候,要预留多一个字节来存放0.
char name[21]; // 最多可以存放20个字节
初始化方法
char name[11]; // 最多存放10个字符,里面是垃圾直
char name2[11] = "hello"; // 初始内容为hello, 多余部分系统自动填0
char name3[] = "hello";
char name4[11] = {"hello"};
char name5 = {0}; // 把全部元素初始化为0
清空字符串
char name[11]; // 最多存放10个字符,里面是垃圾直
memset(name, 0, sizeof(name));
字符串复制
- strcpy
char * strcpy(char * dest, char* src);
将参数src字符串拷贝至dest所指的地址
返回值:返回参数dest字符串起始地址
复制完成会在dest后追加0
如果参数dest所指的内存空间不够大,会导致数组越界
- strncpy
char * strcpy(char * dest, char* src, const size_t n);
将src的前n个字符,赋值给dest
返回值:返回参数dest字符串起始地址
如果src字符串长度小于n,则拷贝完字符串后,在dest后追加0,直到n个
如果src字符串长度大于n, 就截取src的前n个字符,不会在后面追加0
如果参数dest所指的内存空间不够大,会导致数组越界
这里有一个坑, 由于不会追加0, 导致不确定dest的结尾处在哪里,因此使用前,先清空下
char name[11]; // 最多存放10个字符,里面是垃圾直
memset(name, 0 , sizeof(name));
strncpy(name, "hello", 3);
cout << "name = "<<name<<endl;
strlen()获取字符串的长度
strlen()获取字符串的长度,不包含0。
字符串拼接
char* strcat(char *dest, const char * src);
char * strncat(char *dest, const char * src, const size_t n);
字符串比较
int strcmp(const char *str1, const char * str2);
int strcmp(const char *str1, const char * str2, const size_t n);
字符查找
char * strchr(const char *s, const int c);
返回一个指向在字符串s中第一个出现c的位置,如果找不到返回0.
字符串查找
char * strstr(const char* str, const char* substr);
检索子串在str中首次出现的位置,如果找不到则返回0
在vs中,如果要使用c标准的字符串操作函数,要在源代码文件最上面,加上
#define_CRT_SECURE_NO_WARNINGS
网友评论