使用echo编写C文件时如何换行

使用echo编写C文件时如何换行,c,linux,file,echo,system,C,Linux,File,Echo,System,hiıam triying利用系统功能获取文件夹中文件的数据这是代码 char path[100],command[120]; scanf("%s",&path); sprintf(command,"echo $(ls %s) > something.txt",path); system(command); 但是当我查看something.txt时,没有新行。 这是输出,全部在一行,省略了许多文件名: acpi adjtime adobe app

hiıam triying利用系统功能获取文件夹中文件的数据这是代码

char path[100],command[120];
    scanf("%s",&path);

sprintf(command,"echo $(ls %s) > something.txt",path);
            system(command);
但是当我查看something.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

我尝试了echo的
-e
-e
-n
选项,但没有成功。如何在每个文件后换行

您不应该使用
echo
。只是

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

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

有一个新行,这是预期的。
echo
命令将其所有参数打印在一行上,行之间用空格分隔,这就是您看到的输出

您需要执行以下结果:

echo "$(ls %s)"
ls
输出中保留换行符。看

使用:

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

ls %s
因此:

snprintf(command, sizeof(command), "ls %s > something.txt", path);
如果保留回显,您应该担心格式字符串中有超过20个额外字符,因此120应该更像130,如果不是140的话


您还应该使用
scanf(“%99s”,path)
(无符号;添加长度限制),并在理想情况下检查它是否工作(
如果(scanf(…)==1){…OK…}
)。

您尝试过ls-lyeb吗同样的事情发生过有一个新行,这是意料之中的。您需要执行:
echo“$(ls%s)”
以保留
ls
输出中的换行符。看见使用:
snprintf(命令,“echo\”$(ls%s)\>something.txt”,路径)
并担心字符串中有超过20个额外字符,因此120应该更像130,如果不是140的话。您还应该使用
scanf(“%99s”,path)
(无符号;添加长度限制),并在理想情况下检查它是否工作(
if(scanf(…)==1){…OK…}
)。@o11c:Running
ls
需要类似于
系统的东西;它被赋予一个目录名并列出内容。诚然,您可以用C重新设计
ls
,并使用它,但它不能实现代码重用。@JonathanLeffler
readdir
真的没有那么难,这意味着您不必发明一种解析输出的方法。附带问题:使用
printf()
肯定比
sprint()
有优势。然而,在这种情况下,使用
snprintf()
而不检查其返回值,然后调用
system(command)
忽略了格式错误的系统命令可能调用的其余巨大问题。
snprintf(command, sizeof(command), "ls %s > something.txt", path);