0
我嘗試重新注入變量ARG投功能:重新注入變量參數列表Ç郎
#include <stdio.h>
int test_va_arg(char * fmt, ...) {
int c;
c = printf(fmt);
return (c);
}
int test_va_arg2(char * fmt, ...) {
int c;
char buf[1024];
sprintf(buf, "ADD->%s", fmt);
c = printf(buf);
return (c);
}
int test_va_arg3(char * fmt, ...) {
int c;
char * buf;
buf = malloc(1024);
sprintf(buf, "ADD->%s", fmt);
c = printf(buf);
return (c);
}
int main(void) {
int c;
c = test_va_arg("test_va_arg : %d %d %d\n", 421, 847, 1003);
printf("test_va_arg2 :%d\n", c);
c = test_va_arg2("test_va_arg2 : %d %d %d\n", 421, 847, 1003);
printf("test_va_arg2 :%d\n", c);
c = test_va_arg3("test_va_arg3 : %d %d %d\n", 421, 847, 1003);
printf("test_va_arg2 :%d\n", c);
c = test_va_arg("test_va_arg : %d %d %d\n", 421, 847, 1003);
printf("test_va_arg2 :%d\n", c);
return (0);
}
輸出是
# ./test_va_arg
test_va_arg : 421 847 1003
test_va_arg2 :27
ADD->test_va_arg2 : 4196615 178862877 2147483618
test_va_arg2 :49
ADD->test_va_arg3 : 4196615 13586477 2147483618
test_va_arg2 :48
test_va_arg : 421 847 1003
test_va_arg2 :27
我不爭論明白不是在堆棧上。 它似乎是與本地變量的鏈接。我想我必須移動堆棧指針,但我不知道該怎麼做。
您傳遞變量函數參數,但你不打他們之前打電話給printf ...看看[本指南](https://www.tutorialspoint.com/c_standard_library/c_macro_va_start.htm) – LPs
我不想彈出它們。我希望它會由下一個函數完成:printf在這個例子中。 – flav
那麼你必須使用vprintf版本的函數。請參閱相應的手冊頁 – Serge