2017-02-23 12 views
-1

stat関数で使用する2つの文字列を連結しようとしていますが、char *をstrcatしてから印刷すると2行以上表示されます。Cでの文字列連結2行でスプレッド

./ 
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

返信用に何を使用しますか –

+3

'fgets'を使ってうまくいきます - ' \ n'があればそれを削除するコードを追加するだけです。 –

+0

ありがとうございました –