首页 > 后端开发 > C++ > 正文

当参数包含空格时,为什么 C system() 函数会失败?

Barbara Streisand
发布: 2024-10-28 06:34:02
原创
471 人浏览过

Why does the C   system() function fail when parameters contain spaces?

C 语言中的 system() 函数由于参数中存在空格而导致的故障

使用 C 语言中的 system() 函数执行带有参数的程序时包含空格,可能会导致有关不正确的文件名、目录名或卷标语法的错误。当可执行文件的路径和参数文件路径都包含空格时,就会出现此问题。

例如:

<code class="cpp">#include <stdlib.h>
#include <conio.h>

int main() {
    system("\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"");
    _getch();
}</code>
登录后复制

在此代码中,system() 函数尝试执行“pdftotext”具有两个参数的可执行文件。但是,可执行路径和参数路径中都存在空格会触发错误。

问题原因

system() 函数将其参数传递给cmd /k 命令,根据特定规则解释参数。其中一条规则规定,如果命令行恰好包含两个引号字符,引号之间没有特殊字符,并且该字符串是可执行文件的名称,则保留引号字符。

但是,在示例代码中,引号之间的字符串包含空格,违反了规则。因此,cmd /k 命令将该字符串解释为无效的可执行文件名称并产生错误。

解决方案

要解决此问题,请将整个命令括在附加文件中引号:

<code class="cpp">system("\"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>
登录后复制

这确保整个命令字符串被解析为一个参数,防止 cmd /k 命令误解它。

此外,为了保证字符串始终被解析根据正确的规则,您可以包含 /S 开关:

<code class="cpp">system("cmd /S /C \"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>
登录后复制

以上是当参数包含空格时,为什么 C system() 函数会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!