用可變引數列表模擬實現printf函式
用可變引數列表實現printf函式
要實現printf函式,我們首先應該獲取printf函式中由雙引號中的字串,若遇到不是%的字元,我們應該直接將其輸出,若遇到%,我們應該判斷它後面是什麼字元,這裡先只考慮%c,%s的情況,如果是%c那麼我們應該將讀到的字元輸出來,若為%s,應該將讀到的字串通過指標解引用的方式依次輸出,如果是%d%f我們暫且將它當做普通字元輸出。
實現的程式碼如下:
#include<stdlib.h> #include<stdarg.h> void my_printf(char *str,...) { va_list arg; va_start(arg, str); int ch = 0; char *pstr = NULL; while (*str) { if (*str == '%') { str++; switch (*str) { case 'c': { ch = va_arg(arg, char); putchar(ch); break; } case 's': { pstr = va_arg(arg, char*); while (*pstr) { putchar(*pstr); pstr++; } break; } default: putchar(*(str - 1)); putchar(*str); } str++; } else { putchar(*str); str++; } } va_end(arg); } int main() { my_printf("%s %c%c%c\n", "hello", 'b', 'i', 't'); my_printf("%d%f %c%c %f %s\n", 'a', 'b', "hello"); system("pause"); return 0; }
相關推薦
用可變引數列表模擬實現printf函式
用可變引數列表實現printf函式要實現printf函式,我們首先應該獲取printf函式中由雙引號中的字串,若遇到不是%的字元,我們應該直接將其輸出,若遇到%,我們應該判斷它後面是什麼字元,這裡先只考慮%c,%s的情況,如果是%c那麼我們應該將讀到的字元輸出來,若為%s,應
用可變引數列表模擬實現printf函式,可完成下面的功能
【問題描述】:模擬實現printf函式,可完成下面的功能//能完成下面函式的呼叫。//print("s ccc d.\n","hello",'b','a','t',100);//函式原型://print
可變引數列表(模擬實現printf)
1.什麼是可變引數列表?通過將函式實現為可變引數的形式,可以使得函式可以接受1個以上的任意多個引數。我們先看一個例子:int average(int n,...) { va_list arg; //相當於宣告一個指標,名字為arg int i =
【C語言】用可變引數列表實現printf函式
//用可變引數列表實現printf函式 #include <stdio.h> #include <stdarg.h> void my_printf(const char *st
模擬實現printf函式,可變引數列表例項
首先可通過CSDN檢視printf函式原型等資訊 實現功能: Print formatted output to the standard output stream. 即格式化輸出並
用可變引數列表實現簡單的printf函式
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<stdarg.h> void print_num(int n) { if (
【c語言】用可變引數列表實現一個簡化的printf函式
//實現一個簡化的printf函式。 #include <stdarg.h> #include <string.h> void my_printf(const char *str,...) { va_list arg; //準備訪問可變引
C語言 可變引數列表的實現
使用可變引數列表,可以讓函式在不同場合接收不同數量的引數傳入,printf函式的格式化輸出,就是一個典型的例子。 printf("<格式化字串>", <參量表>); &
C語言:模擬實現printf函式
4.1.模擬實現printf函式,可完成下面的功能 能完成下面函式的呼叫。 print("s ccc d.\n","hello",'b','i','t',100); 函式原型: print(char *format, ...) 程式碼如下: #include &l
C語言實現printf函式,即引數可變函式原理
我們在C語言程式設計中會遇到一些引數個數可變的函式,例如printf() 這個函式,它的定義是這樣的: int printf( const char* format, ...); 它除了有一個引數format固定以外,後面跟的引數的個數和型別是 可變的,例如我們可以有以下不
c語言 函式可變引數列表
1、編寫函式求一系列值的平均數,引數數目不確定: #include <stdarg.h> double average(int n_values, ...) { va_list var_arg; int count; double sum=0; va_st
Linux 原始碼系列之可變引數列表實現
背景 從事 android 開發四年有餘,應用開發做得越久,就越有“知其然不知其所以然”的感覺,於是乎,過去的大半年,我幾乎一有時間就去啃《Linux核心完全剖析-基於0.12核心》,接近1000頁的 linux 系統原始碼,讀的過程可謂是五味雜陳,終於在20
[Visual Studio C++] [MFC 除錯錯誤]:str.Format()不存在與引數列表匹配的過載函式
1.編譯問題描述: str.Format(“%d”,m_number)不存在與引數列表匹配的過載函式,紅色波浪線出現在“ . ”下方 2.錯誤程式碼:  
模擬實現strcpy函式功能(優化改進)
strcpy函式,字串拷貝函式,傳入兩個引數,將第二個引數的值拷貝到第一個中去。 首先,給出一個普通的程式碼: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> void
12 裸板實現printf函式
裸板實現printf函式 在uboot上,首先uart第0個控制器已經被uboot驅動好了。 uart控制器負責資料的收發,我們只要把資料交給uart控制器發出,和從uart控制器裡把資料取回來即可。 也就是我們只要找到相應的uart控制器的配置暫存器即可。 檢視
“全棧2019”Java第三十四章:可變引數列表
難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第三十四章:可變引數列表 下一章 “全棧2
stdarg.h可變引數列表(非格式控制)
1.C語言可變引數的概念 最常見的就是scanf和printf函式: int scanf(const char * restrict format,...); int printf(const char *fmt, ...); 你可以輸入任意型別的任意個引數,但是必須在格
模擬實現strlen函式
目錄 方式1(遞迴) 方式2(迴圈) 方式3(指標運算) 正文 方式1(遞迴) int my_strlen1(char *str) { if (*str == '\0') {
模擬實現strcmp函式
strcmp int strcmp ( const char * str1, const char * str2 ); Compare two strings Compares the C string str1 to the C string str2. This f
【C/C++】sprintf中如何將容器作為可變引數列表傳入
近日做指令碼介面時遇到一個變參的傳入介面,因為我們遊戲中的腳本系統是自定義的,這個介面的引數因為是可變,所以將引數讀進來存入一個Vector容器中,然後利用Sprintf格式化之後傳送給客戶端做邏輯,以前的做法就是switch…case…這個容器中元素的個數,然後sprintf( szBuff, nBuffS