30/09/2018, 16:02

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
Nguyễn Minh Dũng viết 18:15 ngày 30/09/2018

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;
}
Đỗ Trung Quân viết 18:15 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:06 ngày 30/09/2018

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.

Đỗ Trung Quân viết 18:03 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:07 ngày 30/09/2018

Hỏi nhiều thứ lắm, chủ yếu là những cái cơ bản nhất thôi 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.

Bài liên quan
0