3.6 KiB
C 语言中的strcat()函数
原文:https://overiq.com/c-programming-101/the-strcat-function-in-c/
最后更新于 2020 年 7 月 27 日
strcat()函数的语法是:
语法: char* strcat (char* strg1, const char* strg2);
该函数用于连接两个字符串。该函数接受两个指向char或(char*)的类型指针参数,因此您可以传递字符串或字符数组。删除第一个字符串中的空字符,然后在第一个字符串的末尾追加第二个字符串。它返回一个指向结果字符串(strg1)的指针。一般情况下strcat()的返回值会被丢弃。
以下是一些例子:
char strg1[40] = "Hello";
/*
returns a pointer (which is discarded) to the string literal
"Hello World" and now strg1 contains "Hello World"
*/
strcat(strg1, " World");
/*
returns a pointer (which is discarded) to the string
to "Hello World :)" and now strg1 contains "Hello World :)"
*/
strcat(strg1, " :)");
您不应该将字符串作为第一个参数传递,因为如果您这样做了,那么strcat()函数将试图修改字符串,这是一种未定义的行为,可能会导致程序崩溃。
strcat("Yello", " World"); // wrong
当strg1指向的数组的大小不足以容纳来自strg2的所有字符时,strcat()的行为是未定义的。程序员的责任是确保strg1指向的数组的大小足够长,可以容纳所有来自strg2的字符。
下面的程序演示了如何使用strcat()功能。
#include<stdio.h>
#include<string.h>
int main()
{
char strg1[40];
char strg2[40];
printf("Enter first string: ");
gets(strg1);
printf("Enter second string: ");
gets(strg2);
printf("\nConcatenating first and second string .. \n\n");
strcat(strg1, strg2);
printf("First string: %s\n", strg1);
printf("Second string: %s", strg2);
// signal to operating system program ran fine
return 0;
}
预期输出:
Enter first string: top
Enter second string: pot
Concatenating first and second string ..
First string: toppot
Second string: pot
让我们创建自己版本的strcat()函数。
char *my_strcat(char *strg1, char *strg2)
{
char *start = strg1;
while(*strg1 != '\0')
{
strg1++;
}
while(*strg2 != '\0')
{
*strg1 = *strg2;
strg1++;
strg2++;
}
*strg1 = '\0';
return start;
}
工作原理:
my_strcat()函数接受指向char或(char*)的类型指针的两个参数,并返回指向第一个字符串即strg1的指针。
在第 3 行中,我们已经将指针strg1分配给了start,这一步是必要的,否则我们将失去对第一个字符串(strg1)开头的地址的跟踪。
第一个 while 循环的工作是将指针strg1移动到最后一个字符,即'\0'。以便第二个 while 循环可以在这个位置开始追加字符。
第二个 while 循环将第二个字符串中的字符逐个追加到第一个字符串中。因为在第一个 while 循环之后strg1指向第一个字符串的空字符,所以在第一次迭代中,语句:
*strg1 = *strg2;
将第二个字符串中的第一个字符追加到第一个字符串的末尾(即代替空字符'\0')。然后strg1++和strg2++递增。这个过程一直重复,直到在第二个字符串中遇到空字符(strg2)。
此时,start 指向的字符串仍然缺少一个东西,空字符('\0')。该声明:
*strg1 = '\0';
在第一个字符串的末尾追加空字符。
最后,return语句将指向第一个字符串的指针返回给调用函数。