使用malloc()和realloc()在Array中存储字符串

时间:2014-01-03 21:32:19

标签: c malloc clang realloc

getWordsArray()获取一个指向char数组的指针 - 输入。

我试图拆分该输入并将每个单词存储在一个char数组中。并最终返回该char数组。

   char *getWordsArray(char *input)
    {
        char *token;
        char *search = " ,";
        char *splited, *temp;
        int counter=0;
        splited = malloc(sizeof(char)*15);
        token = strtok (input,search);
        while (token != NULL ) {
            printf("%s\n",token);
            token = strtok (NULL,search);
          //  splited[counter] = *token;  //aliasing ?
            strcpy(&splited[counter] , token);
            temp= realloc(splited,(counter+1)*sizeof(token));
            if (temp !=NULL) {
                splited = temp;
            } else{
                free(splited);
                printf("Error allocating memory!\n");
                return 0 ;
            }
            counter++;
        }
        printf("list is: %s\n",splited);
        return splited;
    }

它似乎有效,因为它打印正确。 但我明白了:

EXC_BAD_ACCESS

strcpy(&splited[counter] , token);

任何人都可以指出我的错误吗?

2 个答案:

答案 0 :(得分:2)

你的函数返回类型都错了;它必须是char **,而不仅仅是char *。因此,函数中的分配策略也是错误的。您需要为char *数组中存储的每个组成单词分配一个char数组和一个char *数组。

答案 1 :(得分:1)

复制字符串时,例如在strcpy(&splited[counter] , token);,很可能,目的地太长了。那是因为你没有分配一个字符串数组,而是一个char的数组。