使用printf()函數打印字符串的任意部分,請看下例:
- <span style="font-size:16px;">#include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main()
- {
- char * source_str = "THIS IS THE SOURCE STRING" ;
- /* Use printf() to print the first 11 characters of source_str. */
- printf("First 11 characters: ' %11.11s'\n" , source_str);
- /* Use printf() to print only the last 13 characters of source _str. */
- printf("Last 13 characters:'%13.13s'\n", source_str+(strlen(source_str)-13));
- }</span>
輸出結果為:
First 11 characters: 'THIS IS THE'
Last 13 characters:'SOURCE STRING'
在上例中,第一次調用printf()函數時,通過指定參數"%11.11s",迫使printf()函數只打印11個字符的長度,因為源字符串的長度大於11個字符,所以在打印時源字符串將被截掉一部分,只有頭11個字符被打印出來。第二次調用printf()函數時,它將源字符串的最后13個字符打印出來,其實現過程為:
(1)用strlen()函數計算出source_str字符串的長度,即strlen(source_str)。
(2)將source_str的長度減去13(13是將要打印的字符數),得出source_str中剩余字符數。
(3)將strlen(source_str)-13和source_str的地址相加,得出指向source_str中倒數第13個字符的地址的指針;即source_str+(strlen(source_str)-13)。這個指針就是printf()函數的第二個參數。
(4)通過指定參數“%13.13s”,迫使printf()函數只打印13個字符的長度,其結果實際上就是打印源字符串的最后13個字符。
關於“S格式符”的用法的簡單說明:
(1) %ms :輸出的字符串占m列,如果字符串本身長度大於m,則突破m的限制,將字符串全部輸出;若串長度小於m,則在左邊補空格。(2) %-ms:如果字符串長度小於m,則在m列范圍內,字符串向左靠,右補空格。
(3) %m.ns:輸出占m列,但只取字符串中左端n個字符。這n個字符輸出在m列范圍的右側,左補空格。
(4) %-m.ns:其中的m、n的含義同上,n個字符輸出在m列范圍的左側,右補空格。如果n>m,則m自動取n值,即保證n個字符正常輸出。