これで達成しようとしているのは、3つの文字列をデータとして持つリンクリストを作成することです。出力には期待される文字列が表示されますが、いくつかのガベージシンボルが追加されます。f.ex:expected "string pierwszy"、 "string pierwszyn〜rŚÝ"。文字列をcのリンクリストに挿入するとき
私もstrlen(tmp-> word)を印刷しようとしましたが、私は3を得ました。私はそれを得ることはできません。私はそれが1となると思いました。
tmp->word[strlen(new_word)] = "\0";
"\0"
と'\0'
の違いがあります:
#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()関数は、それは、SRCの最大nバイトで がコピーされている以外は、同様です。警告:srcの最初のnバイトの間にヌルバイトがない場合、destに置かれた文字列はNULLで終了しません[...] * – EOF
次のコード 'tmp-> word [strlen(new_word)] = "\ 0";はコンパイルされません。 '\ 0";(文字列)を ''\ 0' '(ヌル終端文字)で置き換えてください。 –