2013-10-29 166 views
0

我正在開發一個文件模糊器,用於改變音樂文件並將它們提供給iTunes。我已經開發了用於改變音樂文件的代碼,但我想使用多個音樂文件來增加代碼覆蓋率。所以我想遍歷我的iTunes庫並將文件路徑加載到緩衝區或文件中;無論哪種方式就足夠了。我在這裏有代碼函數的段錯誤。將fts(3)的輸出寫入文件

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <sys/time.h> 
#include <errno.h> 
#include <fts.h> 

    int compare (const FTSENT**, const FTSENT**); 

int main(void) 
{ 
FILE * musicPaths; 
musicPaths = fopen("Users/NahNig/music_paths", "wb"); 
char *p1 = "/Users/NahNig/Music/iTunes/iTunes Media/Music"; 
char *p2 = NULL; 
char *path[1]; 
path[0] = p1; 
path[1] = p2; 
FTS* file_system = NULL; 
FTSENT* child = NULL; 
FTSENT* parent = NULL; 

file_system = fts_open(path, FTS_COMFOLLOW | FTS_NOCHDIR, &compare); 

if (NULL != file_system) 
{ 
    while((parent = fts_read(file_system)) != NULL) 
    { 
     child = fts_children(file_system,0); 

     if (errno != 0) 
     { 
      perror("fts_children"); 
     } 

     while ((NULL != child) 
      && (NULL != child->fts_link)) 
     { 
      child = child->fts_link; 
      fprintf(musicPaths, "%s%s\n", child->fts_path, child->fts_name); 
      } 
     } 
     fts_close(file_system); 
    } 

    return 0; 
} 


int compare(const FTSENT** one, const FTSENT** two) 
{ 
return (strcmp((*one)->fts_name, (*two)->fts_name)); 
} 

我一直在使用的sscanf和fprintf寫孩子一個緩衝和fwrite嘗試寫入文件試圖;他們都沒有工作。我在谷歌上找到的東西也沒有太多幫助,所以任何幫助將不勝感激。

回答

0

你沒有測試從fopen()的返回值,因爲你從/Users/NahNig/music_paths錯過了第/是NULL。當您使用空指針時,程序崩潰。