user-0 提问: 调用系统函数system(cmd），"echo '%s  %s '>>reports.log"显示注释与时间戳出问题，不生成文件

回复:
user: user-0
content: 引用 16 楼 SXJIAKE 的回复:[quote=引用 10 楼 jisj88 的回复:] [quote=引用 9 楼 ckc 的回复:] 在system(cmd)前加一句puts(cmd)，检查一下字符串正常不正常  测试了，还是不行，帮我看下是哪里出问题了，运行结果如下： chongshiyici（这个是我的输入，下面是命令行的输出） echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log 'chongshiyici  -------------------------------- Process exited after 10.48 seconds with return value 0 请按任意键继续. . .[/quote] 很简单的问题，测试了你都没发现问题。 做有规模的程序还有很长的路要走，要有能力解决这种小问题。  我特意也去测试了这段代码，发现两个问题。如图：  1. Linux 上的如果你用引号引起来，则只有引号内的内容会输出，引号本身被忽略（图见2.1）。 Windows 的 echo 会对后面的内容原样输出，即任何单引号都会直接输出（图见2.2）。 2. 所有的字符串末尾都多出来一个换行符，这一点在你的输出中也有体现。  测试发现问题正在于此。就比如你的：引用echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log 明显最后的命令由于两个字符串尾部都存在换行符，变成了三行。  那么不同的系统上就会出现不同情况： 2.1 如果在 Linux 上，这样的确是正常的。在 Linux shell 中，如果输入的命令中包含奇数个引号，则按下换行并不会执行，在遇到配对的结束引号之前，可以继续输入内容并换行。命令最终执行完成，输出所有引号范围内的内容。在 Ubuntu on Windows 上实测如下：  所以在 Linux 上执行，以上命令最终将三行内容：引用chongshiyici  Tue Oct 30 11:45:06 2018 注意，包括末尾的空行也算一行，输出到文件中。  2.2 在 Windows 上，分解为三个独立的行来执行：引用echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log第一行：原样输出“'chongshiyici”； 第二行：“ Tue Oct 30 11:45:06 2018”找不到命令； 第三行“' >> reports.log”找不到命令。  因此，最终文件里什么都没有。[/quote]    谢谢解答，程序学习的道路还要学很多，要多动脑筋。

user: user-1
content: 引用 10 楼 jisj88 的回复:[quote=引用 9 楼 ckc 的回复:] 在system(cmd)前加一句puts(cmd)，检查一下字符串正常不正常  测试了，还是不行，帮我看下是哪里出问题了，运行结果如下： chongshiyici（这个是我的输入，下面是命令行的输出） echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log 'chongshiyici  -------------------------------- Process exited after 10.48 seconds with return value 0 请按任意键继续. . .[/quote] 很简单的问题，测试了你都没发现问题。 做有规模的程序还有很长的路要走，要有能力解决这种小问题。  我特意也去测试了这段代码，发现两个问题。如图：  1. Linux 上的如果你用引号引起来，则只有引号内的内容会输出，引号本身被忽略（图见2.1）。 Windows 的 echo 会对后面的内容原样输出，即任何单引号都会直接输出（图见2.2）。 2. 所有的字符串末尾都多出来一个换行符，这一点在你的输出中也有体现。  测试发现问题正在于此。就比如你的：引用echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log 明显最后的命令由于两个字符串尾部都存在换行符，变成了三行。  那么不同的系统上就会出现不同情况： 2.1 如果在 Linux 上，这样的确是正常的。在 Linux shell 中，如果输入的命令中包含奇数个引号，则按下换行并不会执行，在遇到配对的结束引号之前，可以继续输入内容并换行。命令最终执行完成，输出所有引号范围内的内容。在 Ubuntu on Windows 上实测如下：  所以在 Linux 上执行，以上命令最终将三行内容：引用chongshiyici  Tue Oct 30 11:45:06 2018 注意，包括末尾的空行也算一行，输出到文件中。  2.2 在 Windows 上，分解为三个独立的行来执行：引用echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log第一行：原样输出“'chongshiyici”； 第二行：“ Tue Oct 30 11:45:06 2018”找不到命令； 第三行“' >> reports.log”找不到命令。  因此，最终文件里什么都没有。

user: user-2
content: 赞一个，到论坛来问问题的人真应该学学怎么分步解决诶问题 这种问题的确你直接问一个人都很难知道，但是你可以通过一些替代命令进行测试来找到答案  引用 16 楼 SXJIAKE 的回复:[quote=引用 10 楼 jisj88 的回复:] [quote=引用 9 楼 ckc 的回复:] 在system(cmd)前加一句puts(cmd)，检查一下字符串正常不正常  测试了，还是不行，帮我看下是哪里出问题了，运行结果如下： chongshiyici（这个是我的输入，下面是命令行的输出） echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log 'chongshiyici  -------------------------------- Process exited after 10.48 seconds with return value 0 请按任意键继续. . .[/quote] 很简单的问题，测试了你都没发现问题。 做有规模的程序还有很长的路要走，要有能力解决这种小问题。  我特意也去测试了这段代码，发现两个问题。如图：  1. Linux 上的如果你用引号引起来，则只有引号内的内容会输出，引号本身被忽略（图见2.1）。 Windows 的 echo 会对后面的内容原样输出，即任何单引号都会直接输出（图见2.2）。 2. 所有的字符串末尾都多出来一个换行符，这一点在你的输出中也有体现。  测试发现问题正在于此。就比如你的：引用echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log 明显最后的命令由于两个字符串尾部都存在换行符，变成了三行。  那么不同的系统上就会出现不同情况： 2.1 如果在 Linux 上，这样的确是正常的。在 Linux shell 中，如果输入的命令中包含奇数个引号，则按下换行并不会执行，在遇到配对的结束引号之前，可以继续输入内容并换行。命令最终执行完成，输出所有引号范围内的内容。在 Ubuntu on Windows 上实测如下：  所以在 Linux 上执行，以上命令最终将三行内容：引用chongshiyici  Tue Oct 30 11:45:06 2018 注意，包括末尾的空行也算一行，输出到文件中。  2.2 在 Windows 上，分解为三个独立的行来执行：引用echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log第一行：原样输出“'chongshiyici”； 第二行：“ Tue Oct 30 11:45:06 2018”找不到命令； 第三行“' >> reports.log”找不到命令。  因此，最终文件里什么都没有。[/quote]

user: user-0
content: 引用 3 楼 cwhelucky123 的回复:[quote=引用 2 楼 jisj88 的回复:] [quote=引用 1 楼 cwhelucky123 的回复:] 你的程序无有任何问题，也一样出现了结果，不象你说的没有文件，文件也有的，我这里的结果是  你是在linux里面执行的吧？   不是的，我是在windows  10里面用mingw运行程序的  换一种问法，如果要在windows中正确生成文件，要怎么修改[/quote] win10里面为什么要用mingw,工具还不是多的是吗？mingw是为了交叉编译后在在linux里执行的，还有在linux里面system是执行一个命令行，巧合的是这条命令windows也是认识的，所以我认为也一样生成了文件，只是文件可能不在你查看的目录吧，那你试试把reports.log改成绝对路径来试试看呢。 不过总觉得这做法不靠谱，windows里执行，为什么用这一堆linux的头文件来做，并且不是标准C的 [/quote]   搜索了整个电脑文件夹，都没有reports.log文件，是用everything搜索的。 今天切换用cygwin了，还不太会用编译器，所以程序还没重新调整。我也想用Linux，但是学习系统还是要费不少功夫的，我现在还是想打算熟悉下编程语言再去折腾系统。

user: user-0
content: 引用 9 楼 ckc 的回复:在system(cmd)前加一句puts(cmd)，检查一下字符串正常不正常  测试了，还是不行，帮我看下是哪里出问题了，运行结果如下： chongshiyici（这个是我的输入，下面是命令行的输出） echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log 'chongshiyici  -------------------------------- Process exited after 10.48 seconds with return value 0 请按任意键继续. . .

user: user-3
content: 在system(cmd)前加一句puts(cmd)，检查一下字符串正常不正常

user: user-0
content: 引用 13 楼 cwhelucky123 的回复:我还是觉得生成了文件了，而未能找到，要不然就是编译工具出了问题，但是代码是肯定没有问题的,因为我用这代码在linux和window都无有问题的,就象四楼的老大说的mingw也是为windows准备的编译器，我也真不知道什么问题了   嗯，我近期也是要换Linux，《嗨翻C语言》快看完了，后面第九章的程序好些编译出来，看进程这章，export,execl这些命令都用不了。

user: user-0
content: 引用 12 楼 ckc 的回复:字符串里多了两个回车吧  我也觉得是输出的问题。根据下面的输出感觉是引号那里的问题 chongshiyici（这个是我的输入，下面是命令行的输出） echo 'chongshiyici  Tue Oct 30 11:45:06 2018 ' >> reports.log     /*感觉问题可能在这里，时间函数自动添加了换行号，可能导致管道输出出问题了，不同系统应该不一样*/ 'chongshiyici

user: user-4
content: 我还是觉得生成了文件了，而未能找到，要不然就是编译工具出了问题，但是代码是肯定没有问题的,因为我用这代码在linux和window都无有问题的,就象四楼的老大说的mingw也是为windows准备的编译器，我也真不知道什么问题了

user: user-3
content: 字符串里多了两个回车吧

user: user-5
content: 引用 7 楼 jisj88 的回复:[quote=引用 5 楼 cfjtaishan 的回复:] 建议去exe所在的目录下找一下reports.log文件. 注意reports.log的路径    搜索了，没有这个文件，今天换编译器了，打算熟悉下cygwin再试下。我在dev c++里面也是这样，感觉对初学者来说，编译器也是个困难点，没看过什么书介绍怎么用编译器的。之前大学的时候还可以用vs 6.0，这玩意太老了，C99的不是标准都不支持了。[/quote]  可以考虑用ubuntu系统

user: user-0
content: 引用 4 楼 SXJIAKE 的回复:⒈恰恰相反，MinGW 是为了将 Linux 的源代码编译为 Windows 系统上的 exe 而存在的。 ⒉没看到什么 Linux 的头文件，stdio.h、stdlib.h 和 time.h 都是 C 语言标准库头文件。 ⒊system 是 C 标准库函数，不区分平台，适用于 Windows 和 Linux。要区分也是区分令。 刚好 echo 命令和和重定向符号在 Linux 和 Windows 均支持。所以这代码一点毛病没有。   那么到底出了什么问题呢？

user: user-0
content: 引用 5 楼 cfjtaishan 的回复:建议去exe所在的目录下找一下reports.log文件. 注意reports.log的路径   搜索了，没有这个文件，今天换编译器了，打算熟悉下cygwin再试下。我在dev c++里面也是这样，感觉对初学者来说，编译器也是个困难点，没看过什么书介绍怎么用编译器的。之前大学的时候还可以用vs 6.0，这玩意太老了，C99的不是标准都不支持了。

user: user-5
content: 建议去exe所在的目录下找一下reports.log文件. 注意reports.log的路径

user: user-1
content: ⒈恰恰相反，MinGW 是为了将 Linux 的源代码编译为 Windows 系统上的 exe 而存在的。 ⒉没看到什么 Linux 的头文件，stdio.h、stdlib.h 和 time.h 都是 C 语言标准库头文件。 ⒊system 是 C 标准库函数，不区分平台，适用于 Windows 和 Linux。要区分也是区分令。 刚好 echo 命令和和重定向符号在 Linux 和 Windows 均支持。所以这代码一点毛病没有。

user: user-4
content: 引用 2 楼 jisj88 的回复:[quote=引用 1 楼 cwhelucky123 的回复:] 你的程序无有任何问题，也一样出现了结果，不象你说的没有文件，文件也有的，我这里的结果是  你是在linux里面执行的吧？   不是的，我是在windows  10里面用mingw运行程序的  换一种问法，如果要在windows中正确生成文件，要怎么修改[/quote] win10里面为什么要用mingw,工具还不是多的是吗？mingw是为了交叉编译后在在linux里执行的，还有在linux里面system是执行一个命令行，巧合的是这条命令windows也是认识的，所以我认为也一样生成了文件，只是文件可能不在你查看的目录吧，那你试试把reports.log改成绝对路径来试试看呢。 不过总觉得这做法不靠谱，windows里执行，为什么用这一堆linux的头文件来做，并且不是标准C的

user: user-0
content: 引用 1 楼 cwhelucky123 的回复:你的程序无有任何问题，也一样出现了结果，不象你说的没有文件，文件也有的，我这里的结果是  你是在linux里面执行的吧？   不是的，我是在windows  10里面用mingw运行程序的  换一种问法，如果要在windows中正确生成文件，要怎么修改

user: user-4
content: 你的程序无有任何问题，也一样出现了结果，不象你说的没有文件，文件也有的，我这里的结果是  你是在linux里面执行的吧？