Frage

Ich habe einige Probleme mit Visual Studio 2008. Sehr einfaches Programm. Drucken Zeichenfolgen, die in als Argumente gesendet werden

Warum tut dies:

#include <iostream>

using namespace std;

int _tmain(int argc, char* argv[])
{
    for (int c = 0; c < argc; c++)
    {
        cout << argv[c] << " ";
    }
}

Für diese Argumente:

program.exe testing one two three

Ausgabe:

p t o t t

Ich habe versucht, dies zu tun mit gcc statt und dann habe ich die ganzen Strings.

War es hilfreich?

Lösung

In der Standardeinstellung nimmt _tmain Unicode-Strings als Argumente, aber cout erwartet ANSI-Strings. Deshalb ist es nur ist das erste Zeichen jedes Strings drucken.

Wenn Sie die Unicode _tmain verwenden möchten, müssen Sie es verwenden, um mit TCHAR und wcout wie folgt aus:

int _tmain(int argc, TCHAR* argv[])
{
    for (int c = 0; c < argc; c++)
    {
       wcout << argv[c] << " ";
    }

    return 0;
}

Oder wenn Sie glücklich sind ANSI-Zeichenfolgen zu verwenden, verwenden Sie den normalen main mit char und cout wie folgt aus:

int main(int argc, char* argv[])
{
    for (int c = 0; c < argc; c++)
    {
       cout << argv[c] << " ";
    }

    return 0;
}

Ein bisschen mehr Detail: TCHAR und _tmain kann Unicode oder ANSI, abhängig von den Einstellungen des Compilers. Wenn UNICODE definiert ist, welche der Standard für neue Projekte ist, sprechen sie Unicode. Es UNICODE nicht definiert ist, sie ANSI sprechen. Also in der Theorie können Sie Code schreiben, der zwischen Unicode und ANSI nicht ändern müssen Builds -. Sie bei der Kompilierung können wählen, die Sie wünschen

Wenn diese nach unten fällt, ist mit cout (ANSI) und wcout (Unicode). Es gibt keine _tcout oder gleichwertig. Aber Sie können trivialerweise selbst erstellen und verwenden, die:

#if defined(UNICODE)
    #define _tcout wcout
#else
    #define _tcout cout
#endif

int _tmain(int argc, TCHAR* argv[])
{
    for (int c = 0; c < argc; c++)
    {
       _tcout << argv[c] << " ";
    }

    return 0;
}

Andere Tipps

Alle Beispiele zeigen Ihnen, wie das argv Element in der Standardausgabe zu drucken. Ich brauchte den Code für bespannen Umwandlung und ich verwenden, um diese:

string localeCode="en-us";
if(argc>1)
{
    #define LOCALELEN 50
    char localeArg[LOCALELEN+1];
    size_t result=-1;
    wcstombs_s(&result, localeArg, LOCALELEN, argv[1], LOCALELEN);
    if(result)
    {
       localeCode.assign(localeArg);
    }
    #undef LOCALELEN
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top