使用echo在C中写入文件时如何换行
How to make new line when using echo to write a file in C
您好,我正在尝试使用系统功能获取文件夹中文件的数据,这是代码
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
我确实尝试了 -e
-E
-n
选项的 echo 但它没有用。如何在每个文件之后换行?
你不应该使用 echo
。只做
sprintf(command,"ls %s > something.txt",path);
system(command);
当您使用 echo
时,它会将所有命令行参数输出到标准输出,一个接一个,由 space 字符分隔。换行符(ls
命令的输出)用作参数分隔符,就像 space.
新增一行,这是意料之中的事情。 echo
命令将其所有参数打印在由空格分隔的一行上,这就是您看到的输出。
您需要执行以下结果:
echo "$(ls %s)"
保留 ls
输出中的换行符。参见 Capturing multiple-line output to a Bash variable。
使用:
snprintf(command, sizeof(command), "echo \"$(ls %s)\" > something.txt", path);`
当然,echo
是多余的;最好简单地 运行:
ls %s
因此:
snprintf(command, sizeof(command), "ls %s > something.txt", path);
如果保留回显,您应该担心格式字符串中有超过 20 个额外字符,因此 120 如果不是 140 应该更像 130。
您还应该使用 scanf("%99s", path)
(无符号;添加长度限制),最好检查它是否有效 (if (scanf(...) == 1) { ... OK ... }
)。
您好,我正在尝试使用系统功能获取文件夹中文件的数据,这是代码
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
我确实尝试了 -e
-E
-n
选项的 echo 但它没有用。如何在每个文件之后换行?
你不应该使用 echo
。只做
sprintf(command,"ls %s > something.txt",path);
system(command);
当您使用 echo
时,它会将所有命令行参数输出到标准输出,一个接一个,由 space 字符分隔。换行符(ls
命令的输出)用作参数分隔符,就像 space.
新增一行,这是意料之中的事情。 echo
命令将其所有参数打印在由空格分隔的一行上,这就是您看到的输出。
您需要执行以下结果:
echo "$(ls %s)"
保留 ls
输出中的换行符。参见 Capturing multiple-line output to a Bash variable。
使用:
snprintf(command, sizeof(command), "echo \"$(ls %s)\" > something.txt", path);`
当然,echo
是多余的;最好简单地 运行:
ls %s
因此:
snprintf(command, sizeof(command), "ls %s > something.txt", path);
如果保留回显,您应该担心格式字符串中有超过 20 个额外字符,因此 120 如果不是 140 应该更像 130。
您还应该使用 scanf("%99s", path)
(无符号;添加长度限制),最好检查它是否有效 (if (scanf(...) == 1) { ... OK ... }
)。