So I have a char array formed by words separated by spaces. The array is read from the input. I would like to print the words that start with a vowel.
My code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *insertt (char dest[100], const char sou[10], int poz) {
int cnt=0;
char *fine = (char *) malloc(sizeof(char) * 3);
char *aux = (char *) malloc(sizeof(char) * 3);
strncpy(fine,dest,poz);
strcat(fine,sou);
do {
aux[cnt]=dest[poz];
poz++;
cnt++;
}
while (poz<=strlen(dest));
strcat(fine,aux);
free(aux);
return fine;
}
int check_vowel(char s) {
switch (s) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
return 1;
default: return 0;
}
}
int main (void) {
const char spc[]=" ";
char s[100];
char *finale = (char *) malloc(sizeof(char) * 3);
int beg,len,aux; //beg - beginning; len - length;
int i = 0;
printf("s=");
gets(s);
finale = insertt(s,spc,0); //the array will start with a space
do {
if (finale[i]==' ' && check_vowel(finale[i+1])==1) {
beg=i+1; //set start point
do { //calculate length of the word that starts with a vowel
len++;
}
while(finale[len]!=' '); //stop if a space is found
printf("%.*s\n", len, finale + beg); //print the word
}
i++;
}
while (i<=strlen(finale)); //stop if we reached the end of the string
free(finale);
return 0;
}
The check_vowel function will return 1 if the character is a vowel, otherwise, it returns 0. The insertt function will insert a const char into a char from a specified position, I used it to insert a space at the beginning of the array.
The input: today Ollie was ill
The output: Segmentation fault (core dumped)
Preferred output:
Ollie
ill
I'm sure the problem is somewhere in the main do-while loop, but I just can't figure out what might be it... The 2 functions work correctly. Thanks!