Vấn đề ở chỗ bạn dùng con trỏ kiểu int để làm việc với mảng kiểu char nên kiểu truy xuất sẽ khác. Với đoạn code test như sau:
#include <stdio.h>
#include <string.h>
int main() {
char word[10];
int *ptr, dem=0, i;
printf("\n nhap chu : ");
fflush(stdout);
scanf("%s", word);
ptr = (int *) &word[0];
for(i = 0; i < strlen(word); i++) {
if ((*ptr == 'u') || (*ptr == 'e') || (*ptr == 'o') || (*ptr == 'a') || (*ptr == 'i'))
dem++;
printf("| %d ", *ptr);
ptr++;
}
printf("chuoi co %d ki tu la nguyen am", dem);
return 0;
}
Input:
abcef
Output:
| 1701012065 | 102 | 4195977 | 0 | 0
chuoi co 0 ki tu la nguyen am
Cái cụm số đầu tiên khó hiểu đó chính là mã hex theo thứ tự của “ecba” (0x65 63 62 61) và 102 chính là 0x66 'f'. Nên cẩn thận hơn, kiểu int cần 4 bytes, nên mỗi khi truy xuất thì nó sẽ truy xuất 4 bytes (thay vì 1 bytes như kiểu char).
Giải quyết: con trỏ ptr phải đổi thành kiểu char.