有没有办法可以用更新的路径更新基本路径的char数组?
struct dirent *dp;
DIR *dir;
struct stat buf;
dir = opendir("./statdir/");
int x;
char base_path[11] = "./statdir/";
char* full_path;
int main(int argc, char* argv[]){
while((dp = readdir(dir)) != NULL) {
full_path = strcat(base_path, dp->d_name);
if((x = lstat(full_path, &buf)) == -1) {
perror("stat failed");
exit(1);
}
printf("Debug: %s\n", full_path);
}
closedir(dir);
return(0);
}
}
我的目标是在每次循环后更新full_path到base_path +无论参数传递给argv [],在我的目录中我有两个文件名为file1和file2 ....
即如果我运行我的代码并写了./Stat,我希望full_path为“./statdir/file1”,然后是“./statdir/file2”
我得到的结果是:
调试:./ statdir /.
调试:./ statdir /...
stat failed:没有这样的文件或目录
答案 0 :(得分:1)
您可以使用snprintf
像这样构建完整的文件名...
snprintf(full_path, PATH_MAX, "%s/%s",base_path, dp->d_name);
...但您首先需要确保full_path
有空间来包含文件名,所以替换
char *full_path;
与
char full_path[PATH_MAX];
答案 1 :(得分:0)
您将字符串连接到base_path
,但该数组的长度足以支持您初始化的字符串。这意味着你要在数组末尾写字。这会调用undefined behavior。
另请注意,full_path
指向base_path
的开头。
相反,将full_path
数组设为足以容纳完整路径的数组。然后使用strcpy
复制基本路径,然后使用strcat
添加当前条目。
char full_path[100];
...
while((dp = readdir(dir)) != NULL) {
strcpy(full_path, base_path);
strcat(full_path, dp->d_name);