C语言 创建连接两个字符串的函数

ohtdti5x  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(129)

创建连接两个字符串的函数应根据以下条件创建函数
1.应使用putchar关键字
1.原型必须为char *_strcat(char *dest,char *src);
1.该函数应在dest的末尾添加一个终止空值
1.函数应返回指向dest的指针。
下面的函数找到src字符串的结尾并将其附加到dest字符串。我在main.c文件中尝试了一下,得到的是World!Hello而不是Hello World!

void concatenate(char* str1, char* str2) {
    int i = 0, j = 0;

    // Find the end of the first string
    while (str1[i] != '\0') {
        i++;
    }

    // Append the second string to the end of the first string
    while (str2[j] != '\0') {
        str1[i] = str2[j];
        i++;
        j++;
    }

    // Add a null terminator to the end of the concatenated string
    str1[i] = '\0';
}
lokaqttq

lokaqttq1#

您的作业有问题:

  • 创建一个连接两个字符串的函数 *。

这句话不够精确:它应该分配一个新的字符串,还是像strcat()那样在第一个字符串的末尾连接第二个字符串?

  • 应根据以下条件创建函数 *。

我宁愿这样写:功能应满足以下要求。

  • 应使用putchar关键字 *。

这是一个非常荒谬的要求!putchar不是一个 keyword,而是一个宏(一个函数),它定义在<stdio.h>中。在用户函数中使用它是可行的,但需要技巧,不是新手应该尝试的,当然也不是任何程序员应该做的。

  • 原型必须为char *_strcat(char *dest, char *src); *

这个要求是假的:

  • 标识符是保留字(它以_开始)。my_strcatconcat_string是更好的选择
  • 至少src应该声明为const char *src。并且它将指示函数的行为可能类似于strcat,或者两个参数都应该是const限定的,并且函数应该分配内存。

该函数应在dest末尾添加一个终止空值。
如果结果将用作C字符串,则这是隐式的。
函数应返回指向dest的指针。
最后,关于预期语义的指示:与strcat相同。
您的实现几乎是正确的,除了以下几点:

  • 名称不符合指定
  • 参数名称不是destsrc
  • 对于ij的类型,应使用size_t
  • 您必须返回dest

根据您的观察,您没有发布完整的程序,但很可能是您以错误的顺序传递了参数和/或包含Hello的目标数组不够长,无法接收连接字符串。
以下是修改后的版本:

#include <stdio.h>

char *my_strcat(char *dest, const char *src) {
    size_t i = 0, j = 0;

#ifdef putchar
    // just using the putchar identifier for fun
#endif

    // Find the end of the first string
    while (dest[i] != '\0') {
        i++;
    }

    // Append the second string to the end of the first string
    while (src[j] != '\0') {
        dest[i] = src[j];
        i++;
        j++;
    }

    // Add a null terminator to the end of the concatenated string
    dest[i] = '\0';

    // return a pointer to dest.
    return dest;
}

int main() {
    char hello[20] = "Hello ";
    char world[] = "World!";

    printf("%s\n", my_strcat(hello, world));
    return 0;
}

相关问题