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

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

11.What will be the output of the program ?

#include<stdio.h>

int main()
{
    char str[] = "Nagpur";
    str[0]='K';
    printf("%s, ", str);
    str = "Kanpur";
    printf("%s", str+1);
    return 0;
}
  • A. Kagpur, Kanpur
  • B. Nagpur, Kanpur
  • C. Kagpur, anpur
  • D. Error

Đề này hay, vì mấy dạng này dễ trong lập trình C lắm.

Một khi mình đã khai báo char str[] = "Nagpur"; thì str mang kiểu char[7] rồi. Khi đó mà gán tiếp str = "Kanpur"; nữa là báo lỗi luôn. Vì “kanpur” là kiểu char*.

Phải sửa lại như thế này thì sẽ chạy ổn.

#include<stdio.h>

int main()
{
    char str[] = "Nagpur";
    str[0]='K';
    printf("%s, ", str);
    //str = "Kanpur";
    strcpy(str, "Kanpur");
    printf("%s", str+1);
    return 0;
}
1 Like

Cái này thì em nhớ là thầy bảo trong C không cho gán như thế, Phải dùng lệnh strcpy để gán chuỗi 2 cho chuỗi 1. Chứ k nghĩ nó lại có lý do như thế này T_T.

1 Like

Anh Đạt cho em hỏi,Dòng này không liên quan??? @ltd

  strcpy(str, "Kanpur");

Khi đã có cái dòng này

  str[0]='K';

Thôi anh ơi, nó giống nhau quá. Em nhìn mãi mới ra khác chữ n vs g =))

1 Like

Em không hiểu chỗ printf("%s", str+1); cái str+1 là sao vậy ạ?

1 Like

str+1 là in ra vị trí thứ 2 trong chuỗi str

Ví dụ: char * str = "abc";
thì

str là a
str+1 là b
str+2 là c

Em coi mấy cái bải mảng và con trỏ ở đây để hiểu

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