【问题标题】:How to parse a folder path with spaces in C code如何在 C 代码中解析带有空格的文件夹路径
【发布时间】:2011-01-08 21:12:40
【问题描述】:

我正在使用这个简单的 C 代码:

char * command = NULL;
sprintf (command, "ls %s", folderpath);
system(command);

问题是当文件夹名称中有空格时... 我知道在 Unix 中我需要添加一个“\”,例如 ls my\ folder\ name

我怎样才能解决这个问题?谢谢!

【问题讨论】:

  • 不太清楚问题是什么:a) 如何安全地运行另一个程序? (由 Ignacio 在下面回答)或 b)如何列出目录条目? (拉尔斯在下面回答)

标签: c parsing path directory


【解决方案1】:

请改用fork()exec*()

【讨论】:

  • 除了让事情变得更复杂之外,这如何解决他的问题?
  • @Neil:您可以在数组中手动​​指定参数,而不是添加引号并祈祷它不会变成梨形。显然只有 fork() 和 exec*() 是不够的,但它应该引导一个人找到 wait*()。
【解决方案2】:

如果您的具体问题确实是要获取文件夹中的文件名列表,那么您最好使用系统调用 opendir/readdir/closedir 来代替。有关详细信息,请参阅他们的手册页。

【讨论】:

    【解决方案3】:

    简单的出路是将文件夹名称放在单引号内 - sprintf( command, "ls '%s'", folder );。 @ndim 提醒我们注意命令注入

    【讨论】:

    • 非常简单,直到有人为您提供 文件夹路径,例如“';cd;rm -rf *”。
    【解决方案4】:

    如果你这样做:

    char * command = NULL;
    sprintf (command, "ls %s", folderpath);
    

    您处于未定义的行为领域。您需要为命令分配一些内存:

    char command[1000];    // for example
    sprintf (command, "ls %s", folderpath);
    

    【讨论】:

      猜你喜欢
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 2012-05-05
      相关资源
      最近更新 更多