Итак, что я пытаюсь достичь с этим, заключается в создании связанного списка с тремя строками в качестве данных. Вывод показывает ожидаемые строки, но добавляет некоторые символы мусора, f.ex .: ожидаемый «string pierwszy», полученный: «string pierwszyn ~ rŚÝ».символы мусора при вставке строки в связанный список в c
Я также попытался распечатать strlen (tmp-> word), и я получил 3. Я не понимаю, я думал, что это будет 1. Я не понимаю, почему это так.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct element element;
struct element{
char * word;
element * next;
};
element * head = NULL;
void addWord(char * new_word){
printf("new_word: %s\n\n\n", new_word);
element *tmp = NULL;
tmp = malloc(sizeof(element));
element *current = head;
tmp->word = malloc(sizeof(char) * strlen(new_word)+1);
strncpy(tmp->word, new_word, strlen(new_word));
tmp->word[strlen(new_word)] = "\0";
tmp->next = current;
head = tmp;
}
void free_list(element * node){
if(node != NULL){
free_list(node->next);
free(node->word);
free(node);
}
}
void print_list(element * node){
element * tmp = node;
while(tmp != NULL){
printf("word: %s\n", tmp->word);
tmp = tmp->next;
}
}
int main()
{
char * name1 = "string pierwszy";
char * name2 = "drugi";
char * name3 = "333trzeci";
addWord(name1);
addWord(name2);
addWord(name3);
print_list(head);
free_list(head);
return 0;
}
'человек strncpy': * [...] Функция strncpy() аналогична, за исключением того, что в большинстве п байт СРК являются скопированный. Предупреждение: если не существует нулевого байта среди первых n байтов src, строка, помещенная в dest, не будет заканчиваться нулем. [...] * – EOF
Следующий код 'tmp-> word [strlen (new_word)] = «\ 0»; 'не компилируется. замените '' \ 0 ";' (строку) на '' \ 0'' (символ нуль-терминатора). –