2012-03-29 37 views
-1

我在做一個用於評估和分析傳輸函數的小應用程序。由於這個問題似乎有些無聊,我希望它至少看起來更加酷酷,親和真棒等...因此:printf(),fprintf(),wprintf()和NSlog()將不會在XCode上打印

  • 步驟1:給我們係數! [一串數字]
  • 第2步:我將寫出帶有上標的多項式。 [在字符串中的數字的一堆]

所以,我寫了一個小ç解析器只打印多項式的一個體面的格式,我需要一個wchar_t字符串,我在飛行串聯。字符串完成後,我快速嘗試在控制檯上打印它以檢查一切正常並繼續。容易嗎?韋爾普,我沒那麼幸運......

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; 

} 

期間,我們可以看到運行temp size: 8印刷的期望次數僅在調試,如果我運行該程序,我得到的打印每次運行任意數量。但在此之後,正如標題所述,wprintf,printf和fprintf不會打印任何內容,但len在每次調用後都會更改其大小。

在調用函數(application:(UIApplication *)application didFinishLaunchingWithOptions:,在測試的時候),我放了一個NSLog來打印返回字符串,並且我沒有得到任何東西,甚至沒有記錄部分。

發生了什麼事?我完全喪失了。

順便說一句,在XCode 4.2上。

回答

2

如果您認爲它沒有打印任何內容,那麼printf/wprintf的返回值是多少?它應該在失敗或1或更多的情況下返回-1,因爲如果成功,它應該總是至少打印描述字符串後面的換行符。

  • 如果返回1或更多,是否打印換行符?你有沒有嘗試將你的程序的輸出管道輸送到一個十六進制自卸車,如hexdump -Cxxd(1)
  • 如果它返回-1,那麼errno的值是多少?

如果事實證明printf與錯誤EILSEQ失敗,那麼什麼是很可能發生的是,你的字符串包含在它的一些非ASCII字符,因爲這些導致wcstombs(3)在默認的C語言環境中失敗。在這種情況下,解決方案是使用setlocale(3)你的程序啓動時,切換到使用UTF-8:

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

的printf's正在迴歸,他們都應該打印線的預期長度,但沒有打印在控制檯中,而不是一個新的行,不是單個字符,也不是什麼,nada,零。我試試UTF8,我會回到你身邊。 – whitelionV 2012-03-29 03:29:36