11.8上午上课 strcat函数(字符猫)

发布于 13 天前  17 次阅读


在C语言中,strcat函数用于将一个字符串追加到另一个字符串的末尾

所以它最大的用处,就是增长和拼接字符串(拼接可以定义新数组,使用strcpy后再使用strcat)

char *strcat(char *dest, const char *src
  • dest:目标字符串,src字符串将被追加到这个字符串的末尾。dest必须有足够的空间来容纳追加后的结果
  • src:源字符串,将追加到目标字符串的末尾

所以字符就很神奇,同strcpy、赋值,strcat也是第一个位置作为目标字符串

下面看看最要关心的字符结束符问题

  • strcat 函数会首先找到目标字符串 dest 中的第一个空字符(即 '\0'然后将源字符串 src 的内容复制到这个位置,覆盖掉 '\0',并在复制完成后在 src 的末尾添加一个新的 '\0'
  • 因此,目标字符串 dest 必须有足够的空间来容纳源字符串 src 的内容以及一个新的结束符 '\0'

so,strcat非常懂人情世故。那么再来看看使用fgets输入时关于换行符的问题

在 C 语言中,使用 fgets 从标准输入读取字符串时,输入的换行符(\n)会被包含在读取的字符串中(没有舍命陪君子时)。如果你想在使用 strcat 连接字符串时避免换行符,可以在使用 fgets 之后手动去除换行符


好吧,这个必须自己动手,丰衣足食

去除换行符的操作如下

  • 先使用 strlen 获取 str 的长度。
  • 直接检查最后一个字符是否为换行符(\n
  • 如果是(当然你自己肯定明白fgets有没有舍命陪君子),将其替换为字符串结束符(\0),以去除换行符

那么,问题来了。之前的strlen表示的数字存储的就是字符结束符\0(两个原因导致,之前说过)

我将倒数第二个字符也替换成\0,那不就拥有两个字符结束符了?

其实不然。在C语言中每个字符串只能有一个结束符,且它必须位于字符串的末尾

以下是详细的解释:

  1. 字符串的结构:在 C 语言中,字符串实际上是一个字符数组,以 '\0' 结尾。例如,字符串 "Hello\n" 在内存中表示为 {'H', 'e', 'l', 'l', 'o', '\n', '\0'}
  2. 去除换行符:当你使用 fgets 读取字符串时,如果用户输入了 "Hello" 并按下回车,src 将会包含 {'H', 'e', 'l', 'l', 'o', '\n', '\0'}。通过检查最后一个字符并将其替换为 '\0'在替换操作中,换行符被移除,字符串的长度会相应减少),你将得到 {'H', 'e', 'l', 'l', 'o', '\0'},这时字符串的长度变为 5
  3. strcat 的工作原理strcat 函数会从目标字符串的末尾开始查找 '\0',并将源字符串的内容复制到目标字符串的末尾,直到遇到源字符串的 '\0'。因此,在去除换行符后,目标字符串的末尾仍然是一个有效的 '\0'strcat 可以正常工作

//所以编译器很聪明,放心大胆地替换吧!替换后使用strcat完全没有问题

但是,替换后请记住字符串的长度发生了变化,那么你要重新使用strlen计算,心里要明白!

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

int main() {
	char str[999];
	fgets(str, 999, stdin);
	printf("%d\n", strlen(str));
	str[strlen(str) - 1] = '\0';
	printf("%d", strlen(str));
	return 0;
}

这个我写的,发现真是这样!哈哈,AI 诚不欺我!

届ける言葉を今は育ててる
最后更新于 2024-11-09