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;
}
この問題に関するお手伝いは素晴らしいと思います。
どうもありがとうございました
'direntp-> d_name!="。 " && direntp-> d_name!= ".." 'はポインタ比較であり、文字列の比較ではありません。指されたデータ(すなわち、ヌル文字までの文字列の内容)を比較するために 'strcmp'を使います。 –
@barakmanos大変ありがとうございます –