Re: [問題] printf輸出的問題
這是不定長度引數(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
討論串 (同標題文章)