Re: [問題] printf輸出的問題

看板C_and_CPP作者 ( 2pac )時間16年前 (2009/03/23 20:54), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
這是不定長度引數(Variable-length argument)取出錯誤造成的問題 首先看一下printf的原型式 int printf(const char *format, ...) 『...』就是不定長度引數 這要靠va_list(type)以及va_start, va_arg, va_end這三個巨集(macro)實作 而printf中『...』裡面有什麼東西要靠va_arg指定才可以取得 例如 va_list arg_ptr; //宣告不定長度引數 double d = va_arg(arg_ptr, double); 或 int i = va_arg(arg_ptr, int); 每次執行va_arg的時候就會根據讀取的型態長度向後位移 這有點像是讀取檔案的情形 而double float int的位元長度是不一樣的 因此你寫下printf("a=%d,b=%d,c=%f\n",5,5.1,5.2);的時候 printf根本不知道後面不定長度引數裡面有什麼東西 只能靠前面的%d %f決定要怎麼讀取不定長度引數的內容 當讀取第二個引數時發生錯誤 後面的也跟著會亂掉 這樣說不知道你有沒有懂? ※ 引述《foxc ( )》之銘言: : 不好意思 小弟有問題想請教 : 環境為 WinXP, Dev-C++ 4.9.9.2 : Source code 如下 : #include<stdio.h> : #include<stdlib.h> : int main(void) : { : printf("a=%d,b=%f,c=%f\n",5,5.1,5.2); : printf("a=%d,b=%d,c=%f\n",5,5.1,5.2); : system("pause"); : return 0; : } : 輸出結果為: : a=5,b=5.100000,c=5.200000 : a=5,b=1717986918,c=-925596534325187160000000000000000000000000000000000000000000 : 00.000000 : 想請教各位前輩們 : 為什麼修改第二行printf中的b輸出的格式為%d後 : 就連c輸出的值也會被影響到呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.7.163

03/24 23:59, , 1F
了解!!!感謝你的解釋~~說的非常清楚~~
03/24 23:59, 1F

05/26 14:58, , 2F
遲來的 推
05/26 14:58, 2F
文章代碼(AID): #19n_RpiD (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
5
8
完整討論串 (本文為第 2 之 2 篇):
問題
5
8
文章代碼(AID): #19n_RpiD (C_and_CPP)