通過函式原型可以看出printf函式其實是乙個可變引數函式,在printf函式中只需要知道傳入函式的第乙個引數,就可以根據該引數在棧中的儲存位置獲取後面引數的位置及資訊了。
printf函式第乙個引數const cahr *format,該字串內包含並確定了後面引數的輸出格式,比如"%c","%d","%d","%x"等等。
printf函式返回值,就是通過該函式列印到標準輸出流(螢幕)的字串,出錯的話就返回乙個負數。
下面自己模擬一下printf函式來感受感受。
基本思路是:利用傳入的第乙個引數,也就是字串。通過對字串的遍歷,若該字元為『%』,則對它後面的字元進行判斷是否是規範化輸出要求的字元(比如'c','d','s',『f』'等等),然後利用va_arg(ap,t);獲取後面引數中引數所對應的資訊,並輸出;若不為'%',則輸出該字元。同時在上述兩種情況下,都需要對所列印的字元個數進行統計(包括輸出數值所對應的數字的個數)。
#include #include #include int myprintf(const char *format, ...)
}break;
case'c':
break;
case'%':
break;
default:
puts("format error!\n");
return ;
}} else if (*format == '\\')
else
format++;
} va_end(arg);
return 0;
}int main()
模擬實現printf函式
如果要想解決這個問題 就要 知道乙個知識點 可變引數列表 可變引數列表是通過巨集來實現的,這些巨集定義於stdarg.h標頭檔案中,它是標準庫的一部分。這個標頭檔案宣告 個型別va list 和三個巨集va start va arg和va end。轉到定義處 檢視一下這幾個巨集和型別 typedef...
模擬實現printf 函式
在構建printf 函式之前,需要簡單分析printf 在幫助文件中可以看到,printf 的格式為printf char format,也就是說printf 是乙個可變引數的函式 此外,還需要了解這些引數是如何在記憶體中儲存的。從這個棧楨結構圖中可以看到print 函式的引數的存放方式,print...
模擬實現 」printf「 函式
在c語言學習中,通過將函式實現為可變引數 形式,使得函式可以接受任意多個引數。當了解可變引數之後很容易實現printf函式。能完成下面函式的呼叫。print s ccc d.n hello b i t 100 函式原型 print char format,include include 使用可變引數...