2016-09-11 4 views
-1

Hey alles, ich bin neu in C++ und ich arbeite an einem einfachen Projekt, die eine eingegebene Zeichenfolge und gibt die Zeichenfolge in umgekehrter Reihenfolge. Ich habe das Programm mit dem programmiert, was ich aus den Programmierkursen kannte, die ich vor Jahren gemacht habe, aber ich bekomme immer eine Warnung für die Verwendung von strcpy und es wird nicht an der Eingabeaufforderung kompiliert und ich bin mir nicht sicher, ob es anders geht. Bitte helfen Sie. Hier ist der Code:Alternative für Strcpy in 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

* "Programmierung Klassen habe ich Jahre "Wie in den frühen 90er Jahren? Ernsthaft, lesen Sie etwas aktuelles Lernmaterial, wenn Sie C++ schreiben. –

+0

['std :: copy()'] (http://en.cppreference.com/w/cpp/algorithm/copy) vielleicht? –

+0

Sie haben nie 'strcpy' deklariert. –

Antwort

-2

Sie könnten memcpy verwenden, um Ihre Zeichenfolge zu kopieren. strcpy verwendet wahrscheinlich intern memcpy.

+0

Er bat um eine C++ Alternative. Ich glaube nicht, dass Sie das beantworten. – user4407569

0

Ich definiere _CRT_SECURE_NO_WARNINGS in allen meinen Projekten, um diese Warnungen zu schließen.

seit Standard strcpy kann Pufferüberlauf verursachen und Memore Korruption können Sie stattdessen strcpy_s verwenden.

1

Sie wollen fast sicher std::string verwenden, und tun Sie Ihr Bestes, um zu vergessen, dass Sie überhaupt jemals von strcpy gehört haben. Ich würde wahrscheinlich etwas auf dieser allgemeinen Ordnung schreiben:

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

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

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

Wenn Sie es vorziehen, die Zeichenfolge anstelle rückgängig zu machen, die Standard-Bibliothek hat eine std::reverse dafür:

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

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

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