Số phần tử trong mảng

Em có đoạn code như sau:

# include< stdio.h>
 # include< conio.h>
 # include< string.h>
int main()
{
	char a[10];
	printf("nhâp vao chuoi a: ");
	gets(a);
	puts(a);
	printf("%c",a[14]);
	getch();
}

khi em nhập vaò chuỗi có 15 phần tử thì nó vẫn puts ra cả chuỗi và printf ra kí tự thứ 15, và nếu nhập chuỗi có 10 kí tự thì nó printf ra 1 kí tự giống dấu “phẩy”.Mọi người ai biếì chỉ hộ em nếu dùng như thế thì có vấn đề gì ko(vì em nghĩ nếu ko có vấn đề gì thì số 10 kia khai man cũng được).Em xin cảm ơn.

Em khai báo a[10] mà nhập vào 15 là không nên nhé, vì như thế hàm gets sẽ ghi đè lên vùng dữ liệu không được cấp cho a

Ký tự giống dấu “phẩy” này là ký tự rác, lý do là khi em khai báo 10, em chỉ được nhập vào 9 thôi. Ký tự cuối dành cho ký tự kết thúc chuỗi '\0'.

Để cho an toàn, không bị lỗi kiểu này, em phải sử dụng hàm fgets. Code mẫu

#include <stdio.h>
int main()
{
        char a[10];
        printf("Nhap vao chuoi a: ");
        fgets(a, 10, stdin);
        puts(a);
        printf("\n%s",a);
        getchar();
}

Chú ý, anh đổi getch thành getchar, cũng tương tự nhưng không cần phải dùng thư viên conio.h, thư viện đã lỗi thời.

Vì em hiểu sai vấn đề, nên em nghĩ số 10 kia khai man cũng được. Anh nghĩ em nên xem lại bài chuỗi của anh.

1 Like

vâng cảm ơn anh. Em sẽ xem video của anh

1 Like

I moved 3 posts to a new topic: Hỏi ngoài lề về ngôn ngữ C

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