簡體   English   中英

從文件中讀取某些字符串時,程序執行中斷

[英]Program execution interrupted when certain String is read from File

我的代碼有一個小問題,希望您能對我有所幫助。 下面的該程序讀取寫在txt文件中的名稱,並將它們存儲在鏈接列表中,然后在命令行上將它們打印出來。

該列表由以下名稱組成:

Gustav Mahler
Frederic Chopin
Ludwig van Beethoven
Johann-Wolfgang Von-Goethe

但是當我運行程序時,在打印列表之前或之后,程序的執行都會中斷。

如果刪除最后一行,則效果很好,但是當我將其重新添加到列表中或用“jlajfi3jrpiök+kvöaj3jiijm。--aerjj”之類的隨機組合替換時,它將再次停止。

有人可以向我解釋為什么程序執行被中斷嗎?

先感謝您 ! :)

這是程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct list {
    char* name;
    struct list *next;
}NODE;

char * getString(char *source);

int main() {

FILE *fpointer = NULL;              
char filename[100];

puts("\nEnter the name of the file:\n");
gets(filename);

if((fpointer = fopen(filename, "r")) == NULL ) {
    printf("\nThe file you have chosen is not valid.\n");
    return 1;
}

char buffer[200];
NODE *head = NULL;
NODE *current = NULL;


while(fgets(buffer, 200, fpointer) != NULL) {

    NODE *node = (NODE *) malloc(sizeof(NODE));                         
    node -> next = NULL;

    node -> name = getString(buffer);


    if(head == NULL) {
        head = node;
    } else {
        current -> next = node;
    }

    current = node;

}

current = head;
while(current) {
    printf("%s", current -> name);
    current = current -> next;
}


return 0;
}


char * getString(char* source) {
    char* target = (char*) malloc(sizeof(char));
    strcpy(target, source);
    return target;
}

getString ,您沒有為要復制的字符串分配足夠的空間:

char* target = (char*) malloc(sizeof(char));

這只是為單個字符分配空間。 您需要足夠的字符串長度,再加上1個字符來終止空終止字節:

char* target = malloc(sizeof(strlen(source) + 1);

實際上,您可以用對strdup的調用來替換整個函數,該函數執行相同的操作。

另外, 不要malloc的返回值 ,也不要使用gets

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM