What will be output of following program? #include
Trả lời:
Đáp án đúng: B
Chương trình này có lỗi nghiêm trọng liên quan đến việc sử dụng con trỏ `ptr1` và `ptr2` mà không được cấp phát bộ nhớ.
1. `char *ptr1 = NULL;` và `char *ptr2 = 0;`: Cả hai con trỏ đều được khởi tạo là `NULL`. Điều này có nghĩa là chúng không trỏ đến bất kỳ vùng nhớ hợp lệ nào.
2. `printf("\n%d", ptr2);`: Dòng này in giá trị của `ptr2` (là `NULL`, tương đương `0`) ra màn hình. Đây là một thao tác hợp lệ, nên sẽ không gây ra lỗi ngay lập tức.
3. `strcpy(ptr1, "c");`: Đây là nơi chương trình gặp lỗi nghiêm trọng. Hàm `strcpy` cố gắng sao chép chuỗi "c" vào vùng nhớ mà `ptr1` trỏ đến. Tuy nhiên, `ptr1` là `NULL`, nên việc sao chép sẽ gây ra lỗi segmentation fault (lỗi truy cập bộ nhớ không hợp lệ) và chương trình sẽ bị dừng. Lỗi này xảy ra do ta đang cố gắng ghi vào một địa chỉ bộ nhớ không được phép.
4. `strcpy(ptr2, "questions");`: Tương tự như trên, dòng này cũng gây ra lỗi segmentation fault vì `ptr2` cũng là `NULL`. Việc sao chép chuỗi "questions" vào một vùng nhớ không hợp lệ sẽ khiến chương trình bị crash.
5. `printf("\n%s %s", ptr1, ptr2);`: Dòng này sẽ không bao giờ được thực thi vì chương trình đã bị dừng ở một trong hai lệnh `strcpy` trước đó.
Như vậy, `strcpy(ptr1, "c")` là dòng lệnh đầu tiên gây ra lỗi và làm chương trình dừng lại.





