使用echo编写C文件时如何换行
hiıam triying利用系统功能获取文件夹中文件的数据这是代码使用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
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:Runningls
需要类似于系统的东西;它被赋予一个目录名并列出内容。诚然,您可以用C重新设计ls
,并使用它,但它不能实现代码重用。@JonathanLefflerreaddir
真的没有那么难,这意味着您不必发明一种解析输出的方法。附带问题:使用printf()
肯定比sprint()
有优势。然而,在这种情况下,使用snprintf()
而不检查其返回值,然后调用system(command)
忽略了格式错误的系统命令可能调用的其余巨大问题。
snprintf(command, sizeof(command), "ls %s > something.txt", path);