Я думаю, вы запутались между char *
и char **
.
Кроме того, обязательно выделите достаточно памяти для символа нулевого завершения в конце строки.
Вот мое решение:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
void printWords(char **words, int numberOfWords)
{
int index;
for (index = 0; index < numberOfWords; index++)
{
printf("%s, %d\n", words[index], (int)strlen(words[index]));
}
}
char ** createWords()
{
char ** words;
// Allocate memory for an array of pointers, length 2.
words = malloc(2 * sizeof(char *));
char hello[] = {"Hello"};
words[0] = malloc((strlen(hello)+1) * sizeof(char));
strcpy(words[0], hello); //Copy word into array
char world[] = {"Worldz"};
words[1] = malloc((strlen(world)+1) * sizeof(char));
strcpy(words[1], world); //Copy word into array
return words;
}
int main (int argc, const char * argv[])
{
char **words;
words = createWords();
printWords(words, 2);
return 0;
}
Я переименовал fillWords в createWords и заставил его возвращать указатель, а не принимать указатель в качестве аргумента. Если вы действительно хотите, чтобы fillWords использовал указатель в качестве аргумента, вы можете это сделать, но аргумент должен иметь тип char ***
.