看板 C_and_CPP 關於我們 聯絡資訊
這是不定長度引數(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
foxc:了解!!!感謝你的解釋~~說的非常清楚~~ 03/24 23:59
lytn:遲來的 推 05/26 14:58