30/09/2018, 23:25

Xuất mảng char ra màn hình

char a[3]={‘a’,‘b’,‘1’};
puts(a);

màn hình : ab…(chữ ko thể nhìn)
tại sao lại thế ? nếu thay 1=’’ thì chỉ ra là:ab.

Tynk Huynk viết 01:29 ngày 01/10/2018

Mình chạy được mà bạn

Khoa NTA viết 01:27 ngày 01/10/2018

Vì 1 chuỗi trong C cũng là 1 mảng thôi nhưng cuối chuỗi phải là ký tự '\0' - và công việc thực hiện với chuỗi cũng kết thúc khi gặp ký tự này nên khi bạn đặt '\0' ở đâu thì chuỗi cũng kết thúc tại đó. Đoạn code nên sửa thành

// Như vầy an toàn hơn.
char a[] = {'a', 'b', '1', '\0'};
puts(a);

// Kiểm tra độ dài:
printf("%d\n", strlen(a));
  • Output:

ab1
3

nghia viết 01:29 ngày 01/10/2018

ok mình hiểu là cuối string là \0 nhưng cái vấn đề mình cần hỏi là vấn đề nó chạy ra cái sà nùi! Mình chạy vs thì thấy vậy nên hỏi!

Khoa NTA viết 01:33 ngày 01/10/2018

Bởi vì kết thúc chuỗi là '\0' nên printf sẽ tìm trên vùng nhớ (kể cả phần ở ngoài phạm vị vùng nhớ của biến) và in ký tự đó ra, chừng nào gặp '\0' thì nó mới dừng. Và dĩ nhiên là ngoài vùng nhớ của biến thì có tùm lum các số, in ra màn hình cái sà nùi là đúng rồi.

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
    char a[] = {'a', 'b', '1'};
    a[5] = '\0';    // chỉ là test, không nên dùng cách này để gán giá trị lớn hơn số lượng đã khai báo.
    puts(a);
    printf("%d\n", strlen(a));
    return 0;
}
  • Output:

ab1�
5

Bài liên quan
0