C ++中strcpy的替代方法

时间:2016-09-11 00:15:20

标签: c++

嘿所有我是c +的新手,我正在开发一个简单的项目,它接受一个输入的字符串并反向输出字符串。我使用我多年前从编程类中记住的内容编写了程序但是我一直收到使用strcpy的警告,它不会在命令提示符下编译,我不确定替代方法。请帮忙。这是代码:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string reverse;
    char *head, *tail, *cstr, temp;
    int i = 0;

    cout << "Please enter a string: " << endl;
    cin >> reverse;

    cstr = new char[reverse.size() + 1];

    strcpy(cstr, reverse.c_str());
    head = &cstr[0];
    tail = &cstr[reverse.size() - 1];

    cout << "The string inverted is: " << endl;

    while (head <= tail) {
        temp = cstr[i];
        cstr[i] = *tail;
        *tail = temp;
        *tail--;
        *head++;
        i++;

    }
    cout << cstr;
    cout << "\n";

    return 0; 

}

3 个答案:

答案 0 :(得分:1)

您几乎肯定想要使用std::string,并尽力忘记您曾经听说过strcpy。我可能会在这个通用顺序上写点什么:

std::string forward;
std::cin >> forward;

std::string reverse{forward.rbegin(), forward.rend()};

std::cout << "The string reversed is: " << reverse;

如果您希望反转字符串,标准库的std::reverse为:

std::string reverse;
std::cin >> reverse;

std::reverse(reverse.begin(), reverse.end());

std::cout << "The string reversed is: " << reverse;

答案 1 :(得分:0)

我在所有项目中定义_CRT_SECURE_NO_WARNINGS以关闭这些警告。

由于标准strcpy可能导致缓冲区溢出和memore损坏,因此您可以使用strcpy_s

答案 2 :(得分:-2)

您可以使用memcpy复制字符串。 strcpy可能会在内部使用memcpy。