【问题标题】:How to join strcpy in C++如何在 C++ 中加入 strcpy
【发布时间】:2023-03-27 05:20:02
【问题描述】:

我很困惑,在我的 C++ 编码中 请帮帮我..

#include <conio.h>
#include <string.h>
#include <iostream.h>
main()
{
    char h1[80];
    char h2[80];
    char move[80];
    clrscr();
    cout<<"Character 1 = ";
    gets(h1);
    cout<<"Character 2 = ";
    gets(h2);
    strcpy(move, h1);
    cout<<"Result = "<<move;
    getch();
}

我想要像这样的输出/结果程序

Move  =  h1+h2;

【问题讨论】:

  • std::string 用于h1move,然后使用move = h1 + h2;
  • 你用的是什么编译器?请不要说它是古老的 Turbo C++。
  • 永远不要使用gets()。这是一个安全漏洞。使用fgets() 或其他东西。
  • 为什么要混合 C 和 C++?
  • @PaulMcKenzie 一旦你在预处理器列表中看到#include &lt;iostream.h&gt;,我认为这并不重要。这很简单ugh。 (上升,顺便说一句)。

标签: c++ join strcpy


【解决方案1】:

你应该使用 strcat 来连接字符串

strcpy(move, h1);
strcat(move, h2);
cout<<"Result = "<<move;

【讨论】:

  • 我要指出这可能会导致 UB,因为 h1h2move 的大小都相同,所以如果 h1 的长度为 30 并且h2 的长度为 30,我们将在 move 之外写入,但 OP 使用的是 gets,因此似乎不必担心缓冲区溢出。
【解决方案2】:
#include <string>
#include <iostream>
main()
{
    std::string h1;
    std::string h2;
    std::string move;
    std::cout << "Character 1 = ";
    std::cin >> h1;
    std::cout << "Character 2 = ";
    std::cin >> h2;
    move = h1 +h2;
    std::cout << "Result = " << move;
}

【讨论】:

    【解决方案3】:
    #include <conio.h>
    #include <string>
    #include <iostream>
    
    main()
    {
        std::string h1;
        std::string h2;
        std::string move;
        clrscr();
        std::cout << "Character 1 = ";
        std::getline(std::cin, h1);
        std::cout << "Character 2 = ";
        std::getline(std::cin, h2);
        move = h1 + h2;
        std::cout << "Result = " << move;
        getch();
    }
    

    【讨论】:

      【解决方案4】:

      使用strcat(move,h2);添加moveh2变量的内容

      strcpy(move, h1);
      strcat(move,h2);   // make sure `move` have enough space to concatenate  `h1` and `h2`
      

      【讨论】:

        【解决方案5】:

        首先最好使用C函数fgets而不是C function gets,因为最后一个是不安全的并且可以覆盖内存..

        例如

        fgets( h1, 80, stdin );
        

        但无论如何,使用标准 C++ 函数getline 会更好。

        如果你想得到 Move = h1+h2 的结果,那么你应该检查 Move 是否可以容纳字符串连接 h1 + h2

        所以你可以写

        if ( strlen( h1 ) + strlen( h2 ) < 80 )
        {
            strcat( strcpy( move, h1 ), h2 );
            cout<<"Result = "<<move;
        }
        

        【讨论】:

        • 问题是 C++ - 这是 C 的答案
        • @Ed Heal 相对于他的代码,这是最有用的答案。
        • @EdHeal 除了使用 cout 之外,代码是 C(甚至没有 std:: )
        • @TomTanner - 它被标记为 C++,我认为作者想要 C++ 代码
        • @Ed Heal 他既不想要 C 也不想要 C++ 代码。他希望他可以将 C 字符串函数与字符数组一起使用。而我的回答对他最有用。他在这个阶段不需要知道例如 std::string,因为他甚至还没有了解。
        猜你喜欢
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 2013-10-18
        • 1970-01-01
        • 2021-11-11
        • 2013-01-06
        • 2020-03-10
        相关资源
        最近更新 更多