eg:c++
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 5 typedef struct t { 6 char a[102]; 7 }T; 8 9 void do_printf(const char * src, int n) 10 { 11 char a[9] = { 0 };//爲了讓最後一個元素爲'\0'(即ASCII碼爲0),\ 12 選擇初始化了的包含9個元素的數組做爲緩衝區 13 int len; 14 if (n == 0 || src == NULL) return; 15 16 if ((len = n % 8) == 0)//輸入字符數要以8的倍數爲單位,故只有可否整除兩個分支 17 { 18 for (int i = 0; i < n / 8; i++)//可以整除 19 { 20 for (int i = 0; i < 8; i++) 21 { 22 a[i] = *src++;//填充8字節,最後一個字節爲數組a的最後一個元素'\0' 23 } 24 printf("%s\n", a); 25 } 26 } 27 else 28 { 29 for (int i = 0; i < n / 8; i++)//不可以整除,先把能整分爲8份的按照8字節打印 30 { 31 for (int i = 0; i < 8; i++) 32 { 33 a[i] = *src++; 34 } 35 printf("%s\n", a); 36 } 37 38 for (int i = 0; i < len; i++)//對8求餘爲len,則須要填充len個字節 39 { 40 a[i] = *src++; 41 } 42 43 for (int i = len; i < 8 ; i++)//因爲不能整除,還須要填充8-len個'0' 44 { 45 a[i] = '0'; 46 } 47 printf("%s\n", a); 48 49 } 50 51 } 52 /* Q:最大輸入100個字符,爲何個人數組緩衝區須要102個字節? 53 A:fgets讀取的數據是輸入參數-1,輸入參數爲102,最大讀取爲101,因爲fgets 54 會讀取最後的換行符(\n),因此當題目要求最大輸入爲100個字符時,加上最後 55 的換行符(\n)就有101個字符了,因此最後選擇102大小的緩衝區*/ 56 int main(void) 57 { 58 T arry[2]; 59 int len1,len2; 60 61 fgets(arry[0].a, 102, stdin); 62 len1=strlen(arry[0].a);//fgets會自動在緩衝區後面加上'\0' 63 64 fgets(arry[1].a, 102, stdin); 65 len2 = strlen(arry[1].a); 66 67 do_printf(arry[0].a,len1-1);//排除fgets吸取的換行符(\n),故len須要減去1 68 do_printf(arry[1].a, len2 - 1); 69 70 return 0; 71 }