Здравствуйте, я кодирую программу, которая принимает строку ввода пользователя и выполняет ее токенизацию и сохраняет ее в связанном списке. Я тестировал свой связанный список с помощью руководства, я имею в виду словосочетание без использования strtok(), и он отлично работает, может быть, есть что-то с моей strtok(). Я не уверен, хотя вы можете также проверить мою реализацию моего связанного списка.связанный список сбивает мою программу
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct wordNode NODE;
struct wordNode
{
char *word;
char *nextWord;
NODE *next;
};
NODE *head = NULL;
NODE *tail = NULL;
NODE* createList(char*, char*);
NODE* addToList(char*, char*);
void printList(void);
int main(void)
{
char input[2048];
char *userWord, *firstWord, *nextWord;
gets(input);
userWord = strtok(input, " .,!?;:");
while(userWord != NULL)
{
firstWord = userWord;
userWord = strtok(NULL, " .,!?;:");
nextWord = userWord;
addToList(firstWord, nextWord);
}
printList();
return 0;
}
NODE* createList(char* word, char* nextWord)
{
NODE *ptr = malloc(sizeof(NODE));
if(ptr == NULL)
{
/*node creation failde*/
return NULL;
}
ptr->word = malloc((strlen(word) + 1)*sizeof(char));
ptr->nextWord = malloc((strlen(nextWord) + 1)*sizeof(char));
ptr->word = strdup(word);
ptr->word = strdup(nextWord);
ptr->next = NULL;
head = tail = ptr;
return ptr;
}
NODE* addToList(char* word, char* nextWord)
{
if(head == NULL)
{
return createList(word, nextWord);
}
NODE *ptr = malloc(sizeof(NODE));
if(ptr == NULL)
{
/*node creation failed*/
return NULL;
}
ptr->word = malloc((strlen(word) + 1)*sizeof(char));
ptr->nextWord = malloc((strlen(nextWord) + 1)*sizeof(char));
ptr->word = strdup(word);
ptr->word = strdup(nextWord);
ptr->next = NULL;
tail->next = ptr;
tail = ptr;
return ptr;
}
void printList(void)
{
NODE *ptr = head;
while(ptr != NULL)
{
printf("\n--%s----%s--\n", ptr->word, ptr->nextWord);
ptr = ptr->next;
}
}
Я проверил его снова. Я думаю, что это связано с моим связанным перечетом. – user2272420
Я уверен, что это тоже. Пожалуйста, дайте нам больше информации, а не просто «он разбился». Например, вы сузились там, где может произойти авария? Использование отладчика сообщит вам эту информацию почти сразу. – kaylum
, если вы используете 'strdup', вам не нужно« malloc »заранее, это будет только утечка памяти – Diego