Em chào mọi người, em mới học lập trình C được vài tuần và có một chút thắc mắc về hàm gets và fgets như sau.
Theo em đọc và tìm hiểu thì hàm gets() để nhập vào giá trị của string, nhưng có một số trình biên dịch bây giờ không dùng và có một hạn chế là không đếm số kí tự max. Hạn chế đó được giải quyết bằng hàm fgets() - giúp đưa vào xâu kí tự và có giới hạn kí tự của xâu.
Mọi người cho em hỏi em hiểu như trên có đúng chưa ạ ? và ngoài điểm khác nhau trên, hàm gets() và fgets() còn khác gì nhau nữa không ạ ?
Tại sao em lập trình để đếm số lần xuất hiện của xâu str2 trong xâu str1 thì khi sử dụng hàm fgets() lại bị sai output ạ ? Cụ thể như sau:
dùng gets:
#include <stdio.h>
#include <string.h>
int main(){
int count =0;
char str1[100], str2[100], *p;
gets(str1);
gets(str2);
p=strstr(str1,str2);
while (p!=NULL) {
count++;
p=strstr(p+1,str2);
}
printf("%d",count);
return 0;
}
dùng fgets():
#include <stdio.h>
#include <string.h>
int main(){
int count =0;
char str1[100], str2[100], *p;
fgets(str1,100,stdin);
fgets(str2,100,stdin);
p=strstr(str1,str2);
while (p!=NULL) {
count++;
p=strstr(p+1,str2);
}
printf("%d",count);
return 0;
}
Khi em để input str1: abcabcabc, str2: bc thì output của cách 1 ra 3 ( đúng ) còn output của cách 2 lại ra 1 ( sai ) ạ ?
Em cảm ơn nhiều ạ.