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.