题目 1032: [编程入门]自定义函数之字符串连接

问题描述:

写一函数,将两个字符串连接

样例输入:

123
abc

样例输出:

123abc

代码分析:

这段代码的主要目的是将两个字符串连接起来,并输出结果。它使用了 fgets 函数获取用户输入的两个字符串,然后通过 contact 函数将它们连接起来并输出。

问题分析:

缺乏输入验证:

代码没有对输入的字符串长度进行验证,如果用户输入的字符串超过了定义的最大长度 MAX_SIZE,可能会导致缓冲区溢出。

字符串连接算法问题:

在 contact 函数中,使用了一个循环来将第二个字符串 y 的内容复制到第一个字符串 x 的末尾。这个循环的终止条件是j < len2 && i < len + len2,这意味着在循环中,x 和 y 的长度之和不能超过 MAX_SIZE。然而,这个判断条件可能会导致一些问题。比如,如果 x 的长度已经等于 MAX_SIZE,那么无论 y 的长度如何,都不会进行字符串连接,因为 i 的值将不会小于 MAX_SIZE。应该根据 x 的剩余空间来判断是否继续复制 y 中的字符,而不是依赖于 x 和 y 总长度。

字符串输入时的换行符处理:

在 main 函数中,使用 fgets 函数获取字符串输入,但没有处理换行符。如果用户在输入时包含换行符,它们也会被添加到字符串中。虽然在后续的处理中会尝试将换行符替换为字符串结束符,但这并不是一个健壮的解决方案,因为用户可能输入的字符串本身就包含换行符。

代码实现:

#include <stdio.h>
#include <string.h>
#define MAX_SIZE 200

void contact(char x[], char y[]) {
    size_t len = strlen(x);
    size_t len2 = strlen(y);
    for (int i = len, j = 0; j < len2 && i < len + len2; j++, i++) {
        x[i] = y[j];
    }
    x[len + len2] = '\0'; // 添加字符串结束符
    printf("%s\n", x);    // 直接输出连接后的字符串
}

int main() {
    char str[MAX_SIZE];
    char str2[MAX_SIZE];
    fgets(str, sizeof(str), stdin);
    fgets(str2, sizeof(str2), stdin);
    size_t len = strlen(str);
    if (len > 0 && str[len - 1] == '\n') {
        str[len - 1] = '\0';
    }
    size_t len2 = strlen(str2);
    if (len2 > 0 && str2[len2 - 1] == '\n') {
        str2[len2 - 1] = '\0';
    }
    contact(str, str2);
    return 0;
}

  • 25
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值