调用system后,它下面的第一个语句就不执行了怎么回事

时间:2022-09-29 13:32:37

printf("update now...\n"); 
system("start update.bat");
printf("Extracting...\n"); //这条语句怎么会被跳过?
Sleep(20*1000);
printf("Delete temp file...\n");
DeleteFile(localPath);


update.bat里的内容是

WinRAR x D:\testfolder\download\update.rar D:\testfolder\Server\ -y
exit

update.bat是一个解压文件的批处理文件,然后C代码通过调用system去运行这个批处理文件,然后system语句下面的printf语句就被跳过了,直接执行Sleep语句了,如果把printf语句删除,则Sleep语句就会被跳过,请教下,这是怎么回子事情啊 调用system后,它下面的第一个语句就不执行了怎么回事

10 个解决方案

#1


我的机器上正常。

#2


引用 1 楼 sundq12 的回复:
我的机器上正常。

晕,不会吧,我在这边试了好多回了,紧接着system语句下面写什么语句都会被跳过,然后从它下面的第二条语句开始执行

#3


引用 2 楼 yangyangsnr 的回复:
Quote: 引用 1 楼 sundq12 的回复:

我的机器上正常。

晕,不会吧,我在这边试了好多回了,紧接着system语句下面写什么语句都会被跳过,然后从它下面的第二条语句开始执行

用的DEVC++

#4


引用 3 楼 yangyangsnr 的回复:
Quote: 引用 2 楼 yangyangsnr 的回复:

Quote: 引用 1 楼 sundq12 的回复:

我的机器上正常。

晕,不会吧,我在这边试了好多回了,紧接着system语句下面写什么语句都会被跳过,然后从它下面的第二条语句开始执行

用的DEVC++
我也用的是DEVC++好着呢,你但不调试一下看看。

#5


引用 1 楼 sundq12 的回复:
我的机器上正常。

嗯,把这几条语句单独拿出来是正常的,但是一放到整体里就会出现上述问题,真奇怪 调用system后,它下面的第一个语句就不执行了怎么回事

#6


1.你怎么知道这条语句被跳过了,你单步调试的时候跳过了还是只是没有打印出来。
2.如果只是没有打印出来,那么可以使用一下fflush试试。

#7


引用 6 楼 sundq12 的回复:
1.你怎么知道这条语句被跳过了,你单步调试的时候跳过了还是只是没有打印出来。
2.如果只是没有打印出来,那么可以使用一下fflush试试。

一开始是没有这个printf的,直接是Sleep,结果根本就没有停顿,然后在它下面加了个system("PAUSE"),也不行,最后加了这个printf,printf不显示,但是Sleep就起作用了...
刚才用VC6编译了一下,问题就不出现了。难道真的是编译器的问题?还是整段代码本身就有隐患...

#8


引用 7 楼 yangyangsnr 的回复:
Quote: 引用 6 楼 sundq12 的回复:

1.你怎么知道这条语句被跳过了,你单步调试的时候跳过了还是只是没有打印出来。
2.如果只是没有打印出来,那么可以使用一下fflush试试。

一开始是没有这个printf的,直接是Sleep,结果根本就没有停顿,然后在它下面加了个system("PAUSE"),也不行,最后加了这个printf,printf不显示,但是Sleep就起作用了...
刚才用VC6编译了一下,问题就不出现了。难道真的是编译器的问题?还是整段代码本身就有隐患...

是缓冲区不一样吧,DEVC++可能留在缓冲区里了,要用fflush强制冲刷吧。VC6直接就出来了。没用过DEVC++,不清楚,你试试?

#9


引用 5 楼 yangyangsnr 的回复:
Quote: 引用 1 楼 sundq12 的回复:

我的机器上正常。

嗯,把这几条语句单独拿出来是正常的,但是一放到整体里就会出现上述问题,真奇怪 调用system后,它下面的第一个语句就不执行了怎么回事

应该不是缓冲区的问题,因为后面有换行符,有刷新缓冲区的!
是不是system函数执行阻塞了?

#10


单步

#1


我的机器上正常。

#2


引用 1 楼 sundq12 的回复:
我的机器上正常。

晕,不会吧,我在这边试了好多回了,紧接着system语句下面写什么语句都会被跳过,然后从它下面的第二条语句开始执行

#3


引用 2 楼 yangyangsnr 的回复:
Quote: 引用 1 楼 sundq12 的回复:

我的机器上正常。

晕,不会吧,我在这边试了好多回了,紧接着system语句下面写什么语句都会被跳过,然后从它下面的第二条语句开始执行

用的DEVC++

#4


引用 3 楼 yangyangsnr 的回复:
Quote: 引用 2 楼 yangyangsnr 的回复:

Quote: 引用 1 楼 sundq12 的回复:

我的机器上正常。

晕,不会吧,我在这边试了好多回了,紧接着system语句下面写什么语句都会被跳过,然后从它下面的第二条语句开始执行

用的DEVC++
我也用的是DEVC++好着呢,你但不调试一下看看。

#5


引用 1 楼 sundq12 的回复:
我的机器上正常。

嗯,把这几条语句单独拿出来是正常的,但是一放到整体里就会出现上述问题,真奇怪 调用system后,它下面的第一个语句就不执行了怎么回事

#6


1.你怎么知道这条语句被跳过了,你单步调试的时候跳过了还是只是没有打印出来。
2.如果只是没有打印出来,那么可以使用一下fflush试试。

#7


引用 6 楼 sundq12 的回复:
1.你怎么知道这条语句被跳过了,你单步调试的时候跳过了还是只是没有打印出来。
2.如果只是没有打印出来,那么可以使用一下fflush试试。

一开始是没有这个printf的,直接是Sleep,结果根本就没有停顿,然后在它下面加了个system("PAUSE"),也不行,最后加了这个printf,printf不显示,但是Sleep就起作用了...
刚才用VC6编译了一下,问题就不出现了。难道真的是编译器的问题?还是整段代码本身就有隐患...

#8


引用 7 楼 yangyangsnr 的回复:
Quote: 引用 6 楼 sundq12 的回复:

1.你怎么知道这条语句被跳过了,你单步调试的时候跳过了还是只是没有打印出来。
2.如果只是没有打印出来,那么可以使用一下fflush试试。

一开始是没有这个printf的,直接是Sleep,结果根本就没有停顿,然后在它下面加了个system("PAUSE"),也不行,最后加了这个printf,printf不显示,但是Sleep就起作用了...
刚才用VC6编译了一下,问题就不出现了。难道真的是编译器的问题?还是整段代码本身就有隐患...

是缓冲区不一样吧,DEVC++可能留在缓冲区里了,要用fflush强制冲刷吧。VC6直接就出来了。没用过DEVC++,不清楚,你试试?

#9


引用 5 楼 yangyangsnr 的回复:
Quote: 引用 1 楼 sundq12 的回复:

我的机器上正常。

嗯,把这几条语句单独拿出来是正常的,但是一放到整体里就会出现上述问题,真奇怪 调用system后,它下面的第一个语句就不执行了怎么回事

应该不是缓冲区的问题,因为后面有换行符,有刷新缓冲区的!
是不是system函数执行阻塞了?

#10


单步