Более конкретно, мой вопрос заключается в том, что я хочу сохранить структурные слова в связанном списке, и у каждого узла есть char * words [10] , это char * words [10] взято из проанализированной строки, каждое слово [i] является словом в этой строке (первые 10 слов).
У меня есть строка (в моем вопросе строка «Я - майка»).и хочу сохранить каждое слово в нем в моей структуре, в частности в словах [0] хранится «я», в словах [1] хранится «я», а в словах [2] хранится «трикотаж».Однако то, что я храню в нем, не слово, а NULL.Как решить эту проблему?
Кроме того, в * функции struct words * parse_string *, в ее третьей части, похоже, также есть некоторые проблемы.Когда я отлаживаю его, в буфере хранятся все символы в нем: «I», «», «a», «m», «» ... Это правильно?
Мой код прикрепленкак показано ниже.
Вот мой файл .c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hwTest.h"
int main(int argc, const char * argv[]) {
struct words *w1 = NULL;
int i;
char *str = "I am jersey.";
w1 = parse_string(" ", str);
for(i = 0; i < w1->count; i++){
printf(" [%d] = \"%s\"", i, w1->words[i]);
printf("\n");
}
}
struct words *parse_string(char *delimiter, char *string){
//first allocate memory space;
// Head pointer doesn't need to store data, it's used for iterating;
words *wordsHead = (words *)calloc(1, sizeof(words));
wordsHead->next = NULL;
//Second, copy the input *string to the buffer field in struct words;
strcpy(wordsHead->buffer,string); //这里就出现了问题:存储在buffer中的是‘I’ ‘ ’ ‘a’...
//Third, use strtok to parse the contents of buffer into up to 10 words, delimited by the character in the string
int x;
for(x = 0; x<10; x++){
char *temp = strtok(wordsHead->buffer, delimiter);
if(temp == NULL){
//When we finished, set int x to "words->count"
wordsHead->count = x;
break;
}
//Store individual word from "words" in "wordHead->words[x]" where x represents the index.
wordsHead->words[x] = temp;
// Finally, returns pointers to following words;
strtok(wordsHead->buffer,NULL); /*pass NULL to 2nd and following calls*/
}
return wordsHead;
}
Вот мой файл .h:
#ifndef hwTest_h
#define hwTest_h
typedef struct words{
// for a linked list;
struct words *next;
//to store the string to be parsed;
char buffer[128];
//number of words(up to 10);
int count;
//pointers to up to 10 words;
char *words[10];
} words;
struct words *parse_string(char *delimiter, char *string);
#endif /* hwTest_h */