2014-01-30 72 views
0

我試圖用gcc編譯並得到了段錯誤。我無法弄清楚是什麼原因造成的,以及如何解決這個問題。什麼導致分段錯誤?我正在使用gcc編譯

struct musiclist 
{ 
    int snum; 
    char sname[30]; 
}; 
struct musiclist a[100]; 

struct comments 
{ 
    char com[100][180]; 
}; 
struct comments coms[100]; 

int ncom = 0; 
int get_comments(struct comments coms[], int i, struct musiclist a[], int ncom) 
{ 
    char buf[30]; 
    strcpy(buf, a[i].sname); 
    snprintf(buf, sizeof(buf), "%s.txt"); 

    FILE *c = fopen(buf, "ab+"); 
    if (!c) 
     printf("Error!"); 

    char *str = (char*)malloc(180 * sizeof(char)); 
    size_t len = 0; 
    while (getdelim(&str, &len, '$', c)) { 
     ncom++; 
     strcpy(coms[i].com[ncom], str); 
    } 
    free(str); 

    return ncom; 
}    
+0

你試過用gdb這樣的調試器嗎? 'gcc -g yoursource.c && gdb a.out' –

+0

你是怎麼調用'get_comments'方法的? –

+1

添加你的'main'函數向我們展示如何重現。另外,你爲什麼要在陌生的地方放置牙套? –

回答

0

這裏要創建文件名:

char buf[30]; 
strcpy(buf, a[i].sname); 

代替:

snprintf(buf, sizeof(buf), "%s.txt"); 

你應該:

strcat(buf, ".txt"); 
+0

used strcat(buf,「.txt」);相反,但它做的事情完全一樣 – user3253686

+0

如果你不想調試,然後插入日誌,即。 printf在哪裏,看看你的printf-s在哪裏結束。另一個看起來可疑的地方是getdelim,它在流結束的情況下返回-1,所以你應該寫:'while(getdelim(&str,&len,'$',c)> 0)' – marcinj

+0

Thanks!這是造成這個問題的原因,但現在程序沒有做任何事情,所以我不得不用類似的東西替換這條線。那麼這個節目就是爲了獲得一首歌曲名稱爲songname.txt,並從它讀取評論直到$分隔符,然後我將這些評論放到評論矩陣中,這樣我就可以爲每首歌曲評論,並且我能夠對一首歌曲有不止一個評論。 – user3253686

0

程序中的某些地方,你可能已經忘記了以確保你有餵食t他號碼或串入所需變量的地址,而是餵它到變量itself.like

scanf("%d",variable_name); 

代替:

scanf("%d",&variable_name); 

而且我是新來的「C」,這樣是儘管我想到了分段故障。

相關問題