2017-02-23 60 views
-1

我想連接兩個字符串用於stat函數,但是當我strcat char *然後打印它顯示兩行像這樣。在c中的字符串連接分佈在兩行

./ 
boot 
tmp 
./ 
tmp 
lib 
./ 
lib 
lost+found 
./ 
lost+found 
sbin 
./ 
sbin 
etc 

我已經嘗試了一些東西,但我可能會談論這一切都是錯誤的。這是我的代碼。

#include <dirent.h> 
#include <stdio.h> 
#include <errno.h> 
#include <sys/stat.h> 
#include <string.h> 
#include <time.h> 


int printDetails(char *path, char *name){ 
struct stat fileInfo; 
char file[100]; 
strcpy(file, path); 
strcat(file, name); 

printf("%s\n", file); 

return 1; 
} 


int main(int argc, char *argv[]) { 
struct dirent *direntp; 
DIR *dirp; 

printf("Please Enter directory path\n"); 
char data[64]; 

if (fgets(data, sizeof data, stdin)) { 

    if ((dirp = opendir("/")) == NULL) { 
     perror ("Failed to open directory"); 
     return 1; 
    } 

    while ((direntp = readdir(dirp)) != NULL) 
    { 
     printf("%s\n", direntp->d_name); 
     if(direntp->d_name != "." && direntp->d_name != ".."){ 
     printDetails(data, direntp->d_name); 
     } 
    } 

    while ((closedir(dirp) == -1) && (errno == EINTR)) ; 
} 
    return 0; 
} 

在這個問題上的任何幫助將是偉大的。

非常感謝

+1

'direntp-> d_name!=「。」 && direntp-> d_name!=「..」'是指針比較,而不是字符串比較。使用'strcmp'來比較指向的數據(即字符串的內容直到空字符)。 –

+0

@barakmanos非常感謝 –

回答

2

fgets將包括在每行的末尾\n字符。也就是說,假設文本的行長不超過您傳入的大小 - 否則您將只獲得部分行。

+0

因此,我應該使用'fgets'來回復 –

+3

,我應該如何使用 - 只需要添加一些代碼來刪除存在的'\ n'。 –

+0

非常感謝 –