01/10/2018, 08:33
Thắc mắc về mảng kí tự, kí tự, chuỗi
Cho em hỏi:
Char* var có khác char var[] nhau không ạ?
Sự khác nhau giữa %c và %s ?
Khi nào thì nên dùng %c khi nào thì nên dùng %s ?
Cám ơn:slight_smile:.
Bài liên quan
[quote=“kiki, post:1, topic:42442”]
Sự khác nhau giữa %c và %s ?Khi nào thì nên dùng %c khi nào thì nên dùng %s ?
[/quote]Không dùng scanf để nhập chuỗi nhé bạn.
char *var
nghĩa là khai báo con trỏvar
thuộc kiểuchar
.char var[]
nghĩa là khai báo mảngvar
có kiểuchar
, nếu không gán ngay lúc khai báo thì phải để thêm chỉ số (số lượng phần tử) trong cặp[]
nữa. VD:char var[30];
.Còn sự khác biệt thì có một vài điểm cần lưu ý như sau:
%c
là đặc tả dùng để nhập/xuất một ký tự có kiểuchar
.VD:
Còn
%s
là đặc tả dùng để nhập/xuất một chuỗi (mảng các ký tự).VD:
Nhưng lưu ý là khi nhập chuỗi nên dùng hàm
fgets()
:fgets(str, sizeof(str), stdin);
. Còn nếu dùng hàmscanf()
thì khi truyền đặc tả nên giới hạn số lượng ký tự nhận vàostdin
luôn:scanf("%30s", &str);
để tránh chương trình bị crash khi người dùng nhập quá nhiều vượt số lượng phần tử mà array có thể chứa.Điều này cũng đồng nghĩa với việc tuyệt đối không nên dùng hàm
gets()
để nhập chuỗi.Còn về những ưu điểm và khuyết điểm của
fgets()
so vớiscanf()
thì nó không liên quan ở topic này nên mình sẽ không đề cập đến, bạn có thể tự tìm hiểu thêm trên mạng.Cảm ơn rất rất nhiều ạ Cơ mà do em mới học C nên chưa hiểu những điểm anh viết Chắc phải học thêm, tìm hiểu thêm nhiều thứ nữa nữa rồi quay lại đây mới hiểu toàn bộ
Cảm ơn nhiều nhiều ạ
Bạn đã học con trỏ chưa, nếu học qua con trỏ rồi thì vấn đề này sẽ dễ hiểu hơn thôi, nên không nhất thiết phải hiểu ngay tức thì, vì nó còn liên quan đến con trỏ và tổ chức bộ nhớ trong máy tính nữa.
Cá nhân mình thấy C/C++ xử lý chuỗi không hay.
Ở trung học có Pascal làm việc với chuỗi hay hơn, rồi giờ biết đến Python xử lý chuỗi còn hay nữa.
Đồng ý về nguyên tắc nhưng mà trong C thao tác trực tiếp được.
Chưa anh ạ mình đọc cũng không hiểu mấy luôn nên cố học mấy phần sau để hiểu rõ rồi quay lại đây
char *var - con trỏ chỉ đến một vùng nhớ kiểu char, muốn tạo một string thì trước hết phải cấp phát động cho nó (vùng nhớ ở heap)
char var[(độ dài)] - mảng của một ký tự đã cấp phát sẵn vùng nhớ (ở stack segment)
%c khi bạn cần lấy một ký tự ví dụ:
char a;
scanf("%c",&a);
printf("%c",a);
%s khi bạn cần in một chuôi, ví dụ
char *s;
s = (char *) malloc(100);
scanf("%s",f);
printf("%s",f);