嵌入式Linux系统编程 — 4.3 strcat、strcpy函数拼接与复制字符串

目录

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个字符。程序运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几度春风里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值