使用 echo 用 C 语言写入文件时如何创建新行



嗨,我试图在具有系统功能的文件夹中获取文件的数据,这是代码

char path[100],command[120];
    scanf("%s",&path);
sprintf(command,"echo $(ls %s) > something.txt",path);
            system(command);

但是当我看东西时.txt没有新行。这是输出,全部在一行上,省略了许多文件名:

acpi adjtime adobe apparmor.d arch-release asound.conf ati at-spi2 avahi bash.bash_logout ... wpa_supplicant X11 xdg xinetd.d xml yaourtrc

我确实尝试了-e -E -n回声选项,但没有奏效。如何在每个文件之后创建一个新行?

你不应该使用 echo .只做

sprintf(command,"ls %s > something.txt",path);
system(command);

当您使用 echo 时,它会将所有命令行参数逐个输出到 stdout,用空格字符分隔。换行符(ls命令的输出)用作参数分隔符,就像空格一样。

有一个新行,这是意料之中的。 echo 命令将其所有参数打印在以空格分隔的单行上,这是您看到的输出。

您需要执行以下结果:

echo "$(ls %s)"

以保留ls输出中的换行符。 请参阅将多行输出捕获到 Bash 变量。

用:

snprintf(command, sizeof(command), "echo "$(ls %s)" > something.txt", path);`

当然,echo是多余的;最好简单地运行:

ls %s

因此:

snprintf(command, sizeof(command), "ls %s > something.txt", path);

如果您保留回显,您应该担心格式字符串中有超过 20 个额外字符的事实,因此 120 应该更像 130 如果不是 140。

您还应该使用 scanf("%99s", path)(没有 & 符号;添加长度限制),理想情况下检查它是否有效 ( if (scanf(...) == 1) { ... OK ... } )。

相关内容

  • 没有找到相关文章

最新更新