2003
01 02 03 04 05 06 07 08 09 10 11 12
2006
01 02 03 04 05 06 07 08 09 10 11 12
2007
01 02 03 04 05 06 07 08 09 10 11 12
2008
01 02 03 04 05 06 07 08 09 10 11 12
2009
01 02 03 04 05 06 07 08 09 10 11 12
2010
01 02 03 04 05 06 07 08 09 10 11 12
2011
01 02 03 04 05 06 07 08 09 10 11 12
2017
01 02 03 04 05 06 07 08 09 10 11 12
2018
01 02 03 04 05 06 07 08 09 10 11 12
 
Jun
24
2005

NSLog 的奇怪行為

昨天發現了一個 NSLog() 的 bug 吧,那就是當要印出的字串內容全為 utf8中文,且只有單行時,NSLog 就不會印這個字串。

 #import  int main() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *string = [[NSString alloc] initWithContentsOfFile: @"utf8.txt" encoding: NSUTF8StringEncoding error: NULL]; NSLog(@"%@", string); return 0; }

而 utf8.txt 這個檔案的內容全部都是中文字且只有一行,用 utf8 編碼儲存。

Sigma [~/Desktop] -yllan- gcc nslogbug.m -o nslogbug -framework Cocoa Sigma [~/Desktop] -yllan- ./nslogbug Sigma [~/Desktop] -yllan- 夾雜一些英文以後: Sigma [~/Desktop] -yllan- emacs utf8.txt Sigma [~/Desktop] -yllan- ./nslogbug 2005-08-24 17:07:37.018 nslogbug[1730] 中文呵呵aaa Sigma [~/Desktop] -yllan-

這並不是 stdout 是 line buffer 的關係。如果是因為 line buffer 有印沒顯示出來,當後面繼續有輸出的時候應該就會把前面沒顯示的東西擠出來。可是當你在後面多印幾行東西的時候你會發現,前面的輸出完全消失了! 害我 debug 好久。

 
 

Write Concisely