所以我有一個字符串有一定數量的字節(或長度)。我說字節是因爲字符串末尾沒有NULL結束符。雖然,我知道弦多久。通常,我們都知道,當您printf("%s", str);
時,它將繼續打印每個字節,直到它變爲NULL字符。我知道沒有C字符串不是NULL終止,但我有一個奇怪的情況,我存儲的東西(不是特定字符串),我不存儲NULL,但「東西」的長度。如何在字符串長度大於n時打印字符串前n個字節?
這裏是一個小例子:
char* str = "Hello_World"; //Let's use our imagination and pretend this doesn't have a NULL terminator after the 'd' in World
long len = 5;
//Print the first 'len' bytes (or char's) of 'str'
我知道你被允許做這樣的事情:
printf("%.5s", str);
但是,隨着這種情況下,我很難在編碼5,雖然與我的情況,5是在一個變量。我會這樣做:
printf("%.(%l)s", len, str);
但我知道你不能這樣做。但給你一個我想要完成的想法。
一個非常類似的問題已經在這裏找到答案:http://stackoverflow.com/a/4777218/2163085 – Ninjammer 2013-03-13 04:02:22
SO 4777218是相關的,但有點不同(主要是指分配而比打印)。 – 2013-03-13 04:16:24
您可以使用'snprintf(format,sizeof(format),「%%。%ds」,len);'創建適當的格式字符串,然後在調用'printf()'時使用'format'。如果你正在執行'scanf()',如果輸入長度不同('scanf()'中的'*'與'printf()'中的'*')非常不同,那麼你實際上必須這樣做。 OTOH,'printf(「%。* s \ n」,len,str)'機制通常最適合'printf()'。 – 2013-03-13 04:18:53