连接文件与路径以获得C中的完整路径

2023-11-23

使用 C,我尝试将目录中的文件名与其路径连接起来,以便我可以为每个文件调用 stat() ,但是当我尝试在循环内使用 strcat 时,它将前一个文件名与下一个文件名连接起来。它在循环期间修改argv[1],但我已经很长时间没有使用C了,所以我很困惑......

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>

int main(int argc, char *argv[]) {
 struct stat buff;

 int status;

 if (argc > 1) {
  status = stat(argv[1], &buff);
  if (status != -1) {
   if (S_ISDIR(buff.st_mode)) { 
     DIR *dp = opendir(argv[1]);
     struct dirent *ep;
     char* path = argv[1];
     printf("Path = %s\n", path);

     if (dp != NULL) {
       while (ep = readdir(dp)) {
       char* fullpath = strcat(path, ep->d_name);
       printf("Full Path = %s\n", fullpath);
     }
     (void) closedir(dp);
   } else {
      perror("Couldn't open the directory");
   }
 }

  } else {
   perror(argv[1]);
   exit(1);
  }
 } else {
   perror(argv[0]]);
                exit(1);
 }

 return 0;
}

你不应该修改argv[i]。即使你有,你也只有一个argv[1],这样做strcat()它将继续附加到您之前拥有的任何内容。

你还有另一个微妙的错误。目录名和其中的文件名应该用路径分隔符分隔,/在大多数系统上。您没有将其添加到代码中。

要解决此问题,请在 while 循环之外:

size_t arglen = strlen(argv[1]);

你应该在你的while loop:

/* + 2 because of the '/' and the terminating 0 */
char *fullpath = malloc(arglen + strlen(ep->d_name) + 2);
if (fullpath == NULL) { /* deal with error and exit */ }
sprintf(fullpath, "%s/%s", path, ep->d_name);
/* use fullpath */
free(fullpath);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接文件与路径以获得C中的完整路径 的相关文章

随机推荐

  • 将多个域添加到 azure 网站

    我正在将一个相当重要的多租户应用程序迁移到 Azure 我看到的挑战之一是它托管着一百多个域 在 Azure 方面 我认为添加自定义域的唯一方法是通过门户手动输入它们 我真的很想使用 Azure PowerShell 或 对于这种一次性操作
  • 如何获取 Win32 中的 CPU 周期数?

    在 Win32 中 有没有办法获得唯一的 cpu 周期计数或类似的东西 对于多个进程 语言 系统 等来说是统一的 我正在创建一些日志文件 但必须生成多个日志文件 因为我们托管 NET 运行时 并且我希望避免从一个日志文件调用另一个日志文件来
  • iOS 5 + GLKView:如何访问像素 RGB 数据以进行基于颜色的顶点拾取?

    我一直在转换我自己的个人 OGLES 2 0 框架 以利用新的 iOS 5 框架添加的功能GLKit 在获得令人满意的结果后 我现在希望实现所描述的基于颜色的拾取机制here 为此 您必须访问后台缓冲区以检索触摸的像素 RGBA 值 然后将
  • 如何下载 XML 文件避免弹出窗口这种类型的文件可能会通过 ChromeDriver 和 Chrome 使用 Python 中的 Selenium 损害您的计算机

    我想从供应商处下载每日 xml 文件 我成功登录并单击链接 接受下载 以开始使用 chromedriver 下载 但我收到弹出窗口 这种类型的文件可能会损害您的计算机 页面的 MIME 是 text html 我不确定链接是否是 text
  • 一个简单的 Java SOAP 客户端

    我是 Web 服务的新手 并且一直在绞尽脑汁地试图在 Internet 上找到一个简单的 Java SOAP 客户端程序 我想做的就是发送一条 SOAP 消息并接收一些响应 有一个提供免费网络服务的网站 您输入国家 地区名称 它就会为您提供
  • 使用 Puppeteer 绕过 Cloudflare

    我正在尝试使用我的 Puppeteer 进入 hotbit io 但当 puppeteer 尝试进入页面时 我遇到了 在访问 www hotbit io 之前检查您的浏览器 当我以 headless false 运行程序时 它会在 5 秒后
  • 运算符“!=”不能应用于“Task”和“int”类型的操作数

    最近我开始使用 Xamarin 创建 Android 应用程序 我尝试使用 SQLite 创建一个小型本地数据库 我使用了以下教程Xamarin 文档网站 不幸的是我收到一个错误 错误 CS0019 运算符 无法应用于类型 Task 和 i
  • 为什么位字节顺序是位字段中的一个问题?

    任何使用位域的可移植代码似乎都会区分小端和大端平台 请参阅Linux内核中struct iphdr的声明此类代码的示例 我根本不明白为什么位字节顺序是一个问题 据我了解 位域纯粹是编译器构造 用于促进位级操作 例如 考虑以下位字段 stru
  • Java 中的表单加载事件处理程序是什么?

    Java 中类似于 C 中的 From Load 的事件处理程序 使用 net beans 是什么 如果您使用 Swing 的 JFrame 请尝试使用 addWindowListener 继承自 java awt Window 侦听器的
  • WebSockets 还是带有phonegap 的替代方案?

    如何使用phonegap 将低延迟数据发送到服务器并返回 考虑到我无法在本地访问 php 文件 并且没有使用 node js 或 WebSockets 的经验 我不知道应该使用哪些 Android 或 Android 中的浏览器本身不支持
  • 自定义 dealloc 和 ARC (Objective-C)

    在我的 iPad 小应用程序中 我有一个使用观察者的 切换语言 功能 每个视图控制器在其期间都会向我的观察者注册自己viewDidLoad void viewDidLoad super viewDidLoad observer regist
  • 如何检查函数模板是否已专门化?

    有没有办法在编译时确定某个函数模板是否是专门的 例如 假设有以下函数模板 template
  • 'selenium.common.exceptions.WebDriverException:消息:无法访问 u'chrome

    我正在使用 webdriver 来配置路由器 但是当我运行脚本时 from selenium import webdriver self driver webdriver Chrome 它打开chrome并且没有响应 然后引发异常 铬无法到
  • Scala 中的平等关系

    我刚刚偶然发现了托尼 莫里斯的一张关于 Java 的博客文章该语言的一个基本问题是 为集合定义定制的相等关系 我认为这是一个big deal并想知道是否有一些 scala 解决方案 这个经典问题体现在对交易的思考中 假设我以 150p 的价
  • WPF 命令和事件有什么区别?

    WPF 和 WPF 有什么区别Command and Event 一般来说 您可以对事件执行与命令几乎相同的操作 只是处理用户交互的模式不同 Commands在 WPF 中 允许您将命令处理程序的实现移至业务层 命令结合了启用状态和执行 因
  • Ember:嵌套组件事件冒泡

    我创建了一组嵌套组件 代码在这里 http emberjs jsbin com hasehija 2 edit HTML level 1 level 2 level 3
  • String.Format 一个整数以在丹麦文化中使用带有小数值的千位分隔符

    我有一根绳子totalPRice它的值是这样的1147 5我想要两件事 1 对值进行四舍五入 以便后面始终有两位数 2 在此字符串中实现千位分隔符 这样最终的输出将是这样的1 147 50我尝试过这样的事情 String Format 0
  • 使用 htaccess 将子目录重定向到子域

    我对使用 htaccess 比较陌生 除了我在网上阅读的内容之外 从未做过任何编码 我正在使用 Bluehost 并且我想将我的博客子目录重定向到子域 示例 我想将 www example com blog 重定向到 blog exampl
  • 使用 HttpContextScoped() 时 StructureMap 不会处理数据上下文

    我的目标是拥有一个数据上下文 MainDbContext ASP NET MVC 中的每个 HTTP 请求 并在请求结束时处理数据上下文 我正在使用以下 StructureMap 配置 public static class Contain
  • 连接文件与路径以获得C中的完整路径

    使用 C 我尝试将目录中的文件名与其路径连接起来 以便我可以为每个文件调用 stat 但是当我尝试在循环内使用 strcat 时 它将前一个文件名与下一个文件名连接起来 它在循环期间修改argv 1 但我已经很长时间没有使用C了 所以我很困