Poll: Kiểm tra kiến thức C - 1.19

Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/11

19.Point out the error in the following program.

#include<stdio.h>
#include<stdarg.h>
void varfun(int n, ...);

int main()
{
    varfun(3, 7, -11.2, 0.66);
    return 0;
}
void varfun(int n, ...)
{
    float *ptr;
    int num;
    va_start(ptr, n);
    num = va_arg(ptr, int);
    printf("%d", num);
}
  • A. Error: too many parameters
  • B. Error: invalid access to list member
  • C. Error: ptr must be type of va_list
  • D. No error

Chưa làm dạng này bao giờ, nhưng đọc ví dụ từ Wikipedia thì thấy
ptr phải là kiểu va_list => chọn C

#include <stdio.h>
#include <stdarg.h>
 
/* print all non-negative args one at a time;
   all args are assumed to be of int type */
void printargs(int arg1, ...)
{
  va_list ap;
  int i;
 
  va_start(ap, arg1); 
  for (i = arg1; i >= 0; i = va_arg(ap, int))
    printf("%d ", i);
  va_end(ap);
  putchar('\n');
}
 
int main(void)
{
   printargs(5, 2, 14, 84, 97, 15, 24, 48, -1);
   printargs(84, 51, -1);
   printargs(-1);
   printargs(1, -1);
   return 0;
}

Cái này tìm kiểu kỹ va_list sẽ thấy khá thú vị :smile:

1 Like

Cái này thấy được dùng nhiều khi mình cần viết lại hàm print để phục vụ cho mục đích print log đặc biệt của chương trình. Trước đây có làm một hệ thống có sử dụng cái này để print alarm. Mà lúc đó nó chạy ổn rồi, a cũng không quan tâm lắm. Chỉ biết công dụng của nó để đi chém gió lúc phỏng vấn thôi.

1 Like

Vậy người ta hỏi gì và anh chém gì =))

Hỏi nhiều thứ lắm, chủ yếu là những cái cơ bản nhất thôi :smile: còn anh chém những gì anh biết, chém bậy bạ bị hỏi ngược lại ko trả lời được là tiêu.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?