2016-09-11 2 views
-1

Привет всем, я новичок в C++, и я работаю над простым проектом, который берет введенную строку и выводит строку в обратном порядке. Я закодировал программу, используя то, что я помнил из классов программирования, которые я взял несколько лет назад, однако я продолжаю получать предупреждение об использовании strcpy, и он не будет компилироваться в командной строке, и я не совсем уверен в альтернативном способе. Пожалуйста помоги. Вот код:альтернатива для strcpy в C++

#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; 

} 
+0

* "классы программирования я взял лет назад "* Нравится, в начале 90-х? Серьезно, прочитайте некоторые современные учебные материалы, если вы собираетесь писать C++. –

+0

['std :: copy()'] (http://en.cppreference.com/w/cpp/algorithm/copy), возможно? –

+0

Вы никогда не объявляли 'strcpy'. –

ответ

-2

Вы можете использовать memcpy для копирования строки. Однако strcpy использует memcpy внутри.

+0

Он попросил альтернативу C++. Я не думаю, что вы отвечаете на это. – user4407569

0

Я определяю _CRT_SECURE_NO_WARNINGS во всех своих проектах, чтобы закрыть эти предупреждения.

поскольку стандартный strcpy может вызвать переполнение буфера и повреждение памяти, вы можете использовать вместо этого strcpy_s.

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;