《字符串篇》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;
}

image

场景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;
}

image

注意事项:

// 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指向的是常量字符串,是不可以被修改掉的

memset(),复制字符到

posted @ 2023-03-30 10:53  Fusio  阅读(42)  评论(0编辑  收藏  举报