system()

Sasayau 2015-02-04 10:07:55

想要的效果是把ping的结果写入txt中,然后在vs中直接跑没有问题,但是运行debug文件夹下的exe却出现下列结果。

首先没有notepad的进程再跑,编译器代码优化也关闭了。

const char * c=new char[100];
string cmd;
cmd="ping ";
cmd.append(ip);
cmd.append(" >pingresult.txt");
c=cmd.c_str();
system(c);
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的小游侠 2015-02-04
  • 打赏
  • 举报
回复
换个文件名呗,换个相对目录什么的试一下呗。
luciferisnotsatan 2015-02-04
  • 打赏
  • 举报
回复
    c=cmd.c_str();     system(c); 直接改成 system(cmd.c_str()); 都不用那个char数组 另外看看有没有进程打开着pingresult.txt文件。 procexp.exe这个工具就可以查看局柄
赵4老师 2015-02-04
  • 打赏
  • 举报
回复
仅供参考
#include <windows.h>
#include <stdio.h>
#include <string.h>
char YN(int k) {
    FILE *f;
    char fn[40];
    char ln[80];
    char yn;
    int n;

    yn='N';
    sprintf(fn,"d:\\ping%d.txt",k);
    f=fopen(fn,"r");
    if (NULL!=f) {
        n=0;
        while (1) {
            if (NULL==fgets(ln,80,f)) break;//
            if (strstr(ln,"ms ")) {
                yn='Y';
                break;//
            }
            n++;
            if (n>=4) break;//
        }
        fclose(f);
    }
    return yn;
}
void main(int argc,char **argv) {
    char cmdstr[256];
    int i;
    int IP[3];
    char c;

    if (argc<2) {
    USAGE:
        printf("Usage example:\n    %s 192.168.60.\nto test 192.168.60.1-254\n",argv[0]);
        return;
    }
    if (4==sscanf(argv[1],"%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&c)) {
        if (0<=IP[0] && IP[0]<=255
         && 0<=IP[1] && IP[1]<=255
         && 0<=IP[2] && IP[2]<=255
         && '.'==c) {
            for (i=1;i<255;i++) {
                sprintf(cmdstr,"cmd /c ping %s%d -n 1 -w 1000 >d:\\ping%d.txt",argv[1],i,i);
                WinExec(cmdstr,SW_HIDE);
            }
            Sleep(3000);
            for (i=1;i<255;i++) {
                printf("%c %s%d\n",YN(i),argv[1],i);
            }
            Sleep(3000);
            WinExec("cmd /c del /q d:\\ping*.txt",SW_HIDE);
        } else goto USAGE;
    } else goto USAGE;
}
mymtom 2015-02-04
  • 打赏
  • 举报
回复
c=cmd.c_str(); ===> strcpy(c, cmd.c_str());
疯狂-的-蜗牛 2015-02-04
  • 打赏
  • 举报
回复
引用 楼主 u012212180 的回复:
想要的效果是把ping的结果写入txt中,然后在vs中直接跑没有问题,但是运行debug文件夹下的exe却出现下列结果。 首先没有notepad的进程再跑,编译器代码优化也关闭了。
const char * c=new char[100];
	string cmd;
	cmd="ping ";
	cmd.append(ip);
	cmd.append(" >pingresult.txt");
	c=cmd.c_str();
	system(c);
程序运行没有问题,在Debug文件夹底下也是正常,你的肯定是有进程在占用那个txt了,可以看看任务管理器。 另外,代码有纰漏: c=cmd.c_str(); 这样做的话就没必要申请内存了:const char * c=new char[100]; 而且你后面都没有释放,即使释放delete[] c ;程序也会崩溃,因为当前的地址是string的,你申请的内存地址不要随意赋值改变!
此后三年 2015-02-04
  • 打赏
  • 举报
回复
不会啊, 没问题的代码, 运行也没问题
mxway 2015-02-04
  • 打赏
  • 举报
回复
不知道什么问题,不过目测c=cmd.c_str();这条语句会造成你前面new的内存空间无法释放。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧