2012-03-29 17 views
-1

Ich mache eine kleine App zum Auswerten und Analysieren von Übertragungsfunktionen. So langweilig wie das Thema zu einigen scheinen mag, will ich es zumindest aussehen besonders kühl und Pro und genial etc ... Also:printf(), fprintf(), wprintf() und NSlog() drucken nicht auf XCode

  • Schritt 1: Gib mir teh Koeffizienten! [Ein Haufen Zahlen]
  • Schritt 2: Ich werde das Polynom mit seinen hochgestellten schreiben. [Die Reihe von Zahlen in einem String]

So schreibe ich einen wenig C-Parser nur das Polynom mit einem anständigen Format zu drucken, für die ich benötigen einen wchar_t Zeichenfolge, die ich im Fluge verketten. Nachdem die Zeichenfolge abgeschlossen ist, versuche ich schnell, es auf der Konsole zu drucken, um zu überprüfen, ob alles in Ordnung ist, und mach weiter. Einfach richtig? Welp, ich bin nicht so viel Glück ...

wchar_t *polynomial_description(double *polyArray, char size, char var){ 

    wchar_t *descriptionString, temp[100]; 
    int len, counter = 0; 
    SUPERSCRIPT superscript; 

    descriptionString = (wchar_t *) malloc(sizeof(wchar_t) * 2); 
    descriptionString[0] = '\0'; 

    while(counter < size){ 

     superscript = polynomial_utilities_superscript(size - counter); 
     len = swprintf(temp, 100, L"%2.2f%c%c +", polyArray[counter], var, superscript); 
     printf("temp size: %d\n", len); 

     descriptionString = (wchar_t *) realloc(descriptionString, sizeof(wchar_t) * (wcslen(descriptionString) + len + 1)); 
     wcscat(descriptionString, temp); 

     counter++; 

    } 

    //fflush(stdout); //Already tried this 
    len = wprintf(L"%ls\n", descriptionString); 
    len = printf("%ls**\n", descriptionString); 
    len = fprintf(stdout, "%ls*\n", descriptionString); 
    len = printf("FFS!! Print something!"); 

    return descriptionString; 

} 

Während des Laufs wir temp size: 8 gedruckt die erwartete Anzahl, wie oft nur für kurze Zeit DEBUGGEN sehen können, wenn ich das Programm ausführen ich eine beliebige Anzahl von Abzügen jeder Lauf erhalten. Aber danach, wie der Titel sagt, drucken wprintf, printf und fprintf nichts, aber len ändert seine Größe nach jedem Aufruf.

In der Anruferfunktion, (application:(UIApplication *)application didFinishLaunchingWithOptions:, während des Testens) Ich legte einen NSLog, um die Rückkehr Zeichenfolge zu drucken, und ich bekomme nichts, nicht einmal den Logteil.

Was passiert? Ich bin völlig am Ende.

Ich bin übrigens auf XCode 4.2.

Antwort

2

Was ist der Rückgabewert von printf/wprintf in dem Fall, in dem Sie denken, es druckt nichts? Es sollte entweder 1 zurückgeben im Falle eines Fehlers oder 1 oder mehr, da, wenn erfolgreich, sollte immer mindestens das Zeilenumbruchzeichen nach der Beschreibung Zeichenfolge gedruckt werden.

  • Wenn es 1 oder mehr zurückgibt, wird der Newline gedruckt? Haben Sie versucht, den Ausgang Ihres Programms an einen Sechskant-Dumper wie hexdump -C oder xxd(1) zu leiten?
  • Wenn es -1 zurückgibt, was ist der Wert von errno?

Sollte sich herausstellen, dass printf mit dem Fehler versagt EILSEQ, dann ganz, was wahrscheinlich passiert ist, dass die Zeichenfolge enthält einige Nicht-ASCII-Zeichen in ihm, da diese wcstombs(3) verursachen in der Standard-C locale zum Scheitern verurteilt. In diesem Fall ist die Lösung setlocale(3) wechselt in ein UTF-8-Gebietsschema zu verwenden, wenn Ihr Programm startet:

int main(int argc, char **argv) 
{ 
    // Run "locale -a" in the Terminal to get a list of all valid locales 
    setlocale(LC_ALL, "en_US.UTF-8"); 
    ... 
} 
+0

Die printf's sind die erwarteten Längen der Linien zurückkehren sie drucken sollen, doch nichts ist in der Konsole gedruckt, nicht eine neue Zeile, nicht einzelne char, nichts, nada, nil. Ich werde versuchen, UTF8, und ich komme zurück zu Ihnen. – whitelionV

Verwandte Themen