I want to break down a sentence and store each string in an array. Here is my code:
#include <stdio.h>
#include <string.h>
int main(void)
{
int i = 0;
char* strArray[40];
char* writablestring= "The C Programming Language";
char *token = strtok(writablestring, " ");
while(token != NULL)
{
strcpy(strArray[i], token);
printf("[%s]\n", token);
token = strtok(NULL, " ");
i++;
}
return 0;
}
It keeps giving me segmentation error and I cannot figure it out. I believe it has something to do when I copy the token to my array.
It's because writablestring
isn't writable at all. Attempting to write to a string literal is undefined behavior and strtok
writes to it (that's right, strtok
modifies its argument).
To make it work, try:
char writablestring[] = "The C Programming Language";
There's also a C FAQ.
Another problem is that you didn't allocate memory for your array of character pointers (so those pointers point to nothing).
char* strArray[40]; /* Array of 40 char pointers, pointing to nothing. */
Maybe try this ?
/* Careful, strdup is nonstandard. */
strArray[i] = strdup(token);
/* Or this. */
strArray[i] = malloc(strlen(token) + 1);
strcpy(strArray[i], token);