目录
1 字符串拼接
1.1 strcat函数
1.2 strncat函数
1.3 示例程序
2 字符串复制
2.1 strcpy函数
2.2 strncpy函数
2.3 示例程序
1 字符串拼接
1.1 strcat函数
在Linux系统中,strcat
函数是C语言标准库中的一个函数,用于将一个字符串追加到另一个字符串的末尾。函数原型如下:
char *strcat(char *dest, const char *src);
dest
:指向目标字符串的指针,这个字符串有足够的空间来容纳追加后的字符串。src
:指向要追加的源字符串的指针。
1.2 strncat函数
strncat
函数用于将一个字符串的一部分追加到另一个字符串的末尾,与 strcat
函数类似,但 strncat
允许你指定最多追加的字符数。函数原型如下:
char *strncat(char *dest, const char *src, size_t n);
dest
:指向目标字符串的指针,这个字符串有足够的空间来容纳追加后的字符串。src
:指向要追加的源字符串的指针。n
:要追加的最大字符数。
1.3 示例程序
下面的示例程序从键盘获取两个字符串,然后将它们拼接在一起,并打印出结果:
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 100 // 定义字符串的最大长度
int main()
{
char str1[MAX_STR_LEN], str2[MAX_STR_LEN], result[MAX_STR_LEN * 2]; // 定义三个字符串数组
// 获取用户输入的第一个字符串
printf("请输入第一个字符串:");
fgets(str1, MAX_STR_LEN, stdin); // 使用fgets来读取一行输入,包括空格
// 获取用户输入的第二个字符串
printf("请输入第二个字符串:");
fgets(str2, MAX_STR_LEN, stdin);
// 去除可能读取的换行符
str1[strcspn(str1, "\n")] = 0;
str2[strcspn(str2, "\n")] = 0;
// 使用strcat函数将两个字符串拼接
strcpy(result, str1); // 首先复制第一个字符串到结果字符串
strcat(result, str2); // 然后将第二个字符串追加到结果字符串的末尾
// 打印拼接后的字符串
printf("拼接后的字符串是: %s\n", result);
return 0;
}
程序首先定义了两个字符串缓冲区,用于存储用户输入的两个字符串,并通过 fgets
函数读取用户输入,同时去除换行符。然后,程序使用 strcpy
函数将第一个字符串复制到两个结果缓冲区,接着使用 strcat
将第二个字符串完整追加到第一个结果缓冲区,而使用 strncat
仅将第二个字符串的前两个字符追加到第二个结果缓冲区。最后程序打印出两种不同的拼接结果。运行结果如下:
2 字符串复制
strcpy()
和 strncpy()
都是C语言标准库中的字符串操作函数,它们用于复制字符串,但是它们在行为上有一些的区别:
2.1 strcpy函数
strcpy()
函数将一个字符串复制到另一个字符串中。strcpy()
不会自动在目标字符串的末尾添加空字符 '\0'
,如果目标字符串的空间不足,会导致缓冲区溢出。函数原型如下:
char *strcpy(char *dest, const char *src);
dest
:目标字符串的指针,需要有足够的空间来存储源字符串,包括结尾的空字符'\0'
。src
:源字符串的指针。
2.2 strncpy函数
strncpy()
函数将一个字符串的一部分复制到另一个字符串中,可以指定复制的最大字符数。strncpy()
会复制源字符串 src
的前 n
个字符到目标字符串 dest
。如果 src
中的字符少于 n
个,剩余的字符将被填充为 \0
,直到 dest
中总共有 n
个字符。如果 src
中的字符多于 n
个,则只有前 n
个字符被复制,dest
中剩余的空间不会被填充为 \0
,因此可能不会形成一个以 \0
结尾的字符串。函数原型如下:
char *strncpy(char *dest, const char *src, size_t n);
dest
:目标字符串的指针。src
:源字符串的指针。n
:要复制的最大字符数。
2.3 示例程序
下面是一个C语言示例程序,演示如何使用 strcpy()
和 strncpy()
函数来复制用户通过键盘输入的字符串,并打印出两种函数复制的结果:
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 100 // 定义字符串的最大长度
int main()
{
char src[MAX_STR_LEN]; // 源字符串
char dest1[MAX_STR_LEN]; // 使用strcpy复制的目标字符串
char dest2[MAX_STR_LEN + 1]; // 使用strncpy复制的目标字符串,+1是为了确保有足够的空间存储额外的空字符
// 获取用户输入的字符串
printf("请输入一个字符串:");
fgets(src, MAX_STR_LEN, stdin); // 使用fgets来读取一行输入,包括空格
// 去除可能读取的换行符
src[strcspn(src, "\n")] = 0;
// 使用strcpy函数复制整个字符串
strcpy(dest1, src);
printf("使用strcpy复制的字符串: %s\n", dest1);
// 清空dest2以便重新使用
memset(dest2, 0, sizeof(dest2)); // 使用memset清空dest2
// 使用strncpy复制前20个字符
strncpy(dest2, src, 5);
// 确保dest2以空字符结尾,strncpy可能不会复制空字符
dest2[20] = '\0';
printf("使用strncpy复制的字符串: %.20s\n", dest2); // 打印前20个字符
return 0;
}
程序首先输入一个字符串,然后使用 fgets
读取用户输入,去除末尾的换行符。接着,使用 strcpy
函数将用户输入的字符串完整复制到 dest1
,并打印出来。之后,程序使用 memset
清空 dest2
,然后用 strncpy
函数复制用户输入的前5个字符到 dest2
,并打印出复制的字符串的前20个字符。程序运行结果如下: