1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* f = NULL;
int c; size_t n, nb_chars;
unsigned char buffer[] = {0XC3, 0XA0, 0X62, 0X63, 0X64, 0XC3, 0XA9, 0X66, 0X67, 0X68, 0XC3, 0XB9};
unsigned char buffer_input[15];
// Step 1: write
f = fopen("file.txt","wb");
if (!f) {
printf("main - error : fopen 1\n");
return EXIT_FAILURE;
}
fwrite (buffer , sizeof(char), sizeof(buffer), f);
fclose (f);
// Step 2: read and display
f = fopen("file.txt","r");
if (f == NULL) {
printf("main - error : fopen 2\n");
return EXIT_FAILURE;
}
n = 0; nb_chars = 0;
c = fgetc(f);
while (c != EOF) {
printf("%c", c);
buffer_input[n] = c;
c = fgetc(f);
++n; // XXX Warning: overflow
}
printf("\n");
nb_chars = n;
fclose (f);
// Step 3: parse and display
for(n = 0; n < nb_chars; ++n) {
c = buffer_input[n];
if (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'))) {
printf("%c", c);
} else if (c == 0XC3) {
++n;
c = buffer_input[n];
switch(c) {
case 0XA0: printf("a"); break;
case 0XA9: printf("e"); break;
case 0XB9: printf("u"); break;
}
}
}
printf("\n");
return EXIT_SUCCESS;
} |