《字符串篇》string.h应用
char[]
char[]结尾一定要是\0
原文链接:https://www.bilibili.com/read/cv11933740
char数组一定要以‘\0’结尾
例如:
要转换的字符串为”Huang“
定义 char c[6] ={'H','u','a','n','g','\0'}
再用string s(&c); 即可
若用char c[5] ={'H','u','a','n','g''}
再用string s(&c); 则会出现你那种情况
先把char[],字符数组初始化一下,再进行相关的操作。
char[]初始化
(1) char str[10]="";
(2) char str[10]={'\0'};
(3) char str[10]; str[0]='\0';
第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组的第一个元素初始化为'\0'。如果数组的size非常大,那么前两种方式将会造成很大的开销。
string.h中的常见方法
fputs(),把字符串写入到指定的流 stream 中,但不包括空字符。
原文链接:https://www.runoob.com/cprogramming/c-function-fputs.html
int fputs(const char *str, FILE *stream)
// str -- 这是一个数组,包含了要写入的以空字符终止的字符序列。
// stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。
实例:
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "w+");
fputs("这是 C 语言。", fp);
fputs("这是一种系统程序设计语言。", fp);
fclose(fp);
return(0);
}
让我们编译并运行上面的程序,这将创建文件 file.txt,它的内容如下:
这是 C 语言。这是一种系统程序设计语言。
strchr(),在一个串中查找给定字符的第一个匹配之处。
原文链接:https://www.runoob.com/cprogramming/c-function-strchr.html
#include <string.h>
char *strchr(const char *str, int c)
// str -- 要查找的字符串。
// c -- 要查找的字符。
实例:
#include <stdio.h>
#include <string.h>
int main ()
{
const char str[] = "https://www.runoob.com";
const char ch = 'o';
char *ptr;
ptr = strchr(str, ch);
if (ptr != NULL) {
printf("字符 'o' 出现的位置为 %ld。\n", ptr - str + 1);
printf("|%c| 之后的字符串是 - |%s|\n", ch, ptr);
} else {
printf("没有找到字符 'o' 。\n");
}
return(0);
}
结果:
字符 'o' 出现的位置为 16。
|o| 之后的字符串是 - |oob.com|
strcat(),是在字符串后面追加上另外一个字符串
声明:
#include <string.h>
char *strcat(char *dest, const char *src);
解释:
- dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
- src – 指向要追加的字符串,该字符串不会覆盖目标字符串。
- 该函数返回一个指向最终的目标字符串 dest 的指针。
实例
char *dest = "abc";
char *src = "efg";
strcat(dest, src);
cout << dest << endl;
结果
abcdefg
实际调用
#include<string.h>
#include<stdio.h>
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
printf("%s\n", strcat(arr1, arr2));
return 0;
}
strcpy(),将一个字符串复制到另一块空间地址中
原文链接:https://blog.csdn.net/weixin_47970952/article/details/126163736
strcpy()函数:是将一个字符串复制到另一块空间地址中 的函数,‘\0’是停止拷贝的终止条件,同时也会将 '\0' 也复制到目标空间。
场景1:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10] = "########";
printf("%s\n", strcpy(arr,"hello"));
return 0;
}
场景2:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[10] = "**********";
char arr2[10] = "abcd";
printf("%s\n", strcpy(arr1, arr2));
return 0;
}
注意事项:
// 1源字符必须以 '\0'结束:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[10] = "**********";
char arr2[] = { 'a','b','c','d' };
printf("%s\n", strcpy(arr1,arr2));
return 0;
}
// 这里的代码会出错,'\0'是停止拷贝的终止条件,
// arr2字符数组所在的内存空间后面存储的内容并不知道,
// 不遇到 '\0' 拷贝就不会停止,这就会导致越界访问,程序就会出现问题。
// 2.目标空间必须足够大,以确保能放源字符串
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[5] = "*****";
char arr2[] = "hello world";
printf("%s\n", strcpy(arr1,arr2));
return 0;
}
// 这里虽然拷贝成功并将结果输出了,但程序却崩溃了。
// 目标空间太小,不足以放置拷贝的源字符串,会造成溢出的情况
// 3 目标空间必须可变
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char* str1 = "hello world";
char str2[10] = "*********";
printf("%s\n", strcpy(str1,str2));
return 0;
}
// 这里的程序也出现了错误。str1指向的是常量字符串,是不可以被修改掉的