C语言将字符串输出到QQ,巩固C语言(五)----获取CMD输出的字符串 & 字符串的拷贝、查找、长度 & 实例之调戏QQ...

1 获取CMD中字符串的输出:

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

void getCMD(char *in, char *out)

{

char buffer[128] = { 0 };

FILE *pipe = _popen(in, "r");//获取命令行的输入,并执行,pipe相当于一个管道

if (!pipe)

exit(-1);

while (!feof(pipe))//判断文件是否结束

{

if (fgets(buffer, 128, pipe))//从管道中读取数据

{

strcat(out, buffer);

}

}

_pclose(pipe);//关闭该管道

}

void main()

{

FILE *my_out = fopen("out.txt", "w");

if (!my_out)

exit(-1);

char CMDin[50] = { 0 };

char CMDout[4096] = { 0 };

scanf("%s", CMDin);

getCMD(CMDin, CMDout);

printf("打印输出:%s", CMDout);

printf("\nstrlen(CMDout) = %d\n", strlen(CMDout));

fprintf(my_out, "%s", CMDout);

fclose(my_out);

system("pause");

}

在out.txt中将会出现和CMD中一样的输出字符串。

2 与文件相关的指令

C语言程序在进行文件操作时遵循如下操作步骤:打开读写操作关闭,通俗地说,打开是获取文件结构、系统为文件分配缓冲区的过程,不打开文件就不能对其进行读写,关闭是释放缓冲区和其他资源的过程,不关闭文件就会慢慢耗光系统资源,。

在进行文件操作时,系统自动与3个标准设备文件联系,这3个文件无需打开和关闭,它们的文件指针分别是:

stdin:标准输入文件指针,系统分配为键盘。

stdout:标准输出文件指针,系统分配为显示器。

stderr:标准错误输出文件指针,系统分配为显示器。

举例来说,从文件输入和向文件输出有两个对应函数fscanf和fprintf,两个函数的原型分别为:

int fprintf(FILE* ofp,控制字符串,参数表);

int fscanf(FILE* ifp ,控制字符串,参数表);

参数表中参数的个数同样是任意的,fprintf函数用于将转换后的控制字符串写出到ofp指向的文件中,fscanf用于从ifp指向的文件中读取字节信息为参数表中的参数赋值。

前面章节中用到的标准输入输出函数printf和scanf实际上等价于:

fprintf(stdout, 控制字符串,参数表)

fscanf(stdin, 控制字符串,参数表)

3 字符串的拷贝、查找、长度

#define _CRT_SECURE_NO_WARNINGS

#include

#include

int strLength(const char *str)

{

int num = 0;

while (*str)

{

num++;

str++;

}

return num;

}

void strCat(char *dest, const char *sour)

{

//注意当 char *dest = "Apple Lin"时会发生错误,因为不知道dest最多能承载多少字符

//当然遇到这种情况时可以用realloc函数实现

int destLen = strLength(dest);

int sourLen = strLength(sour);

char *temp = dest + destLen;

while (*sour)

{

*temp = *sour;

temp++;

sour++;

}

*temp = '\0';

}

char * StrStr(char *sour, char *find)

{

char *p = NULL;//要返回的地址指针

int sourLen = strLength(sour);

int findLen = strLength(find);

for (int i = 0; i < sourLen - findLen; i++)

{

int flag = 1;//标识符

for (int j = 0; j < findLen; j++)

{

if (sour[i + j] != find[j])

{

flag = 0;

break;

}

}

if (flag == 1)//找到了

{

p = &sour[i];

break;

}

}

return p;

}

void main()

{

char str[40] = "Apple Lin";

char sour[20] = " Qian Qin";

printf("length = %d\n", strLength(str));

strCat(str, sour);

printf("*str = %s\n", str);

printf("length = %d\n", strLength(str));

char find[10] = "Lin";

char *p = StrStr(str, find);

if (p == NULL)

printf("Not find!\n");

else

printf("Find!\n");

system("pause");

}

运行结果:

length = 9

*str = Apple Lin Qian Qin

length = 18

Find!

请按任意键继续. . .

4 调戏QQ----找到QQ并将之关闭

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

int strLength(const char *ch)

{

int num = 0;

while (*ch)

{

num += 1;

ch++;

}

return num;

}

void strCat(char *dest, const char *sour)

{

int destLen = strLength(dest);

int sourLen = strLength(sour);

char *temp = dest + destLen;

while (*sour)

{

*temp = *sour;

temp++;

sour++;

}

*temp = '\0';

}

//需要使用下标

char * strFind(char *dest, char *str)

{

char *p = NULL;

int destLen = strLength(dest);

int strLen = strLength(str);

for (int i = 0; i < destLen - strLen; i++)

{

int flag = 1;

for (int j = 0; j < strLen; j++)

{

if (dest[i + j] != str[i])

{

flag = 0;

break;

}

}

if (flag == 1)

{

p = dest + i;

break;

}

}

return p;

}

//不需要使用下标

char * strFind2(char *dest, char *str)

{

char *p = NULL;

for (char *tem_dest = dest; *tem_dest != '\0'; tem_dest++)

{

int flag = 1;

for (char *tem_str = str; *tem_str != '\0'; tem_str++)

{

if (*(tem_dest + (tem_str - str)) == '\0')

{

flag = 0;

break;

}

if (*(tem_dest + (tem_str - str)) != *tem_str)

{

flag = 0;

break;

}

}

if (flag == 1)

{

p = tem_dest;

break;

}

}

return p;

}

void receCMD(char *cmd, char *out)

{

FILE *pipe = _popen(cmd, "r");

char buffer[128] = { 0 };

if (!pipe)

exit(-1);

while (!feof(pipe))

{

if(fgets(buffer, 128, pipe))

strCat(out, buffer);

}

_pclose(pipe);

}

void main()

{

char in[40] = "tasklist";

char out[9192] = { 0 };

/*printf("请您输入指令:");

scanf("%s", in);*/

receCMD(in, out);

char *p = strFind2(out, "QQ.exe");

if (p)

{

printf("QQ存在,关闭之...!");

system("taskkill /f /im QQ.exe");

}

else

printf("QQ不存在!");

system("pause");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值