2

I keep getting that error. I am pretty sure it has something to do with memory allocation but i'm not quite sure how to fix it.

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>

char * VOWELS ="aeiouAEIOU";


void printLatinWord(char *a);


int main(int argc, char **argv){
    char phrase[100];
    char *word = malloc(sizeof(char) *100);

    printf("Enter the phrase to be translated: \n");

    fgets(word, 100, stdin);
    printf("The phrase in Pig Latin is:\n");
    word = strtok(phrase, " ");
    printLatinWord(word);

    return 0;
}

void printLatinWord(char *word){
    while (strchr(VOWELS, *word) == NULL){
    char consonant = *word;
    char *to=word, *from=word+1;

    while (*from)
         *to++=*from++;
         *to=consonant;
    }
    printf("%say\n", word);
}

the out put gives "Segmentation fault (core dumped)"

Timothy Jones
  • 21,495
  • 6
  • 60
  • 90
livelaughlove
  • 376
  • 3
  • 9
  • 21
  • While this isn't an answer, you should really learn how to use [`gdb`](http://www.gnu.org/s/gdb/) as it will allow you to see exactly where the problem occurs. – Michael Mior Nov 11 '11 at 16:37
  • How far does it get before it seg faults? Do the other `printf` statements get executed? Might want to use a debugger to step through. – wkl Nov 11 '11 at 16:37
  • This looks a bit spurious: `char *word = malloc(sizeof(char) *100);`. You then reassign `word` with the return value of `strtok()`. – trojanfoe Nov 11 '11 at 16:40

1 Answers1

5
fgets(word, 100, stdin);
word = strtok(phrase, " ");

You have the parameters the wrong way round here. You're splitting the string in phrase which is uninitialized, and then you're assigning the result to word thus overwriting the pointer to the memory you previously allocated.

You probably intended for the fgets to read the input into phrase rather than word.

Graham Borland
  • 60,055
  • 21
  • 138
  • 179
  • 1
    Note that you don't need to allocate memory for `word`. After calling `strtok` it will point to the data inside the `phrase` buffer. – Graham Borland Nov 11 '11 at 16:49