您的位置:首页 > 其它

20150502管道、字符串

2016-06-20 21:49 295 查看
一.管道

1.两个进程间通信(管道)

<span style="font-size:24px;">#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main123() {

char str[1024];

gets(str);
puts(str);

system("pause");
}

int exeshell(char *cmd,char *result) {//传递指令,返回结果
FILE *pf = _popen(cmd,"r");//打开一个管道,用这个管道执行cmd
if (pf == NULL) {
printf("文件打开失败\n");
return 0;
}
else {
while (!feof(pf)) {//到了文件末尾返回1,没有返回0
char str[256] = { 0 };
if (fgets(str, 256, pf)) {//fgets返回读到多少个字符
strcat(result,str);//拼接字符串
}
}

_pclose(pf);//关闭管道
}
return 1;

}
void main() {

char result[1024 * 8] = { 0 };

if (exeshell("tasklist",result)!=0) {
printf("%s", result);
}
char *p = strstr(result, "QQ.exe");
if (p != NULL) {
printf("QQ执行中\n");
}
else {
printf("QQ未执行\n");
}

system("pause");
}</span>
二.printf可变参数
<span style="font-size:24px;">#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

void myprintf(char *pstar, ...) {//...可变参数
va_list ap;//起始点

va_start(ap, pstar);//从ap开始读取pstar

char flag;
while (*pstar) {
flag = *pstar;//取出字符

//pstar++;

if (*pstar != '%') {
putchar(flag);
pstar++;
}
else {
pstar++;//往前 &d &c &s &&
flag = *pstar;

switch (flag) {
case 'd':
{
int data = va_arg(ap, int);//读取下一个参数按照int
printf("%d", data);//整数转化字符串,挨个显示字符
break;
}
case 's':
{
char *str = va_arg(ap, char*);//读取下一个参数按照int
printf("%s", str);//整数转化字符串,挨个显示字符
break;

}
case 'c':
{
char ch = va_arg(ap, char);//读取下一个参数按照int
putchar(ch);//整数转化字符串,挨个显示字符
break;

}
case 'f':
{
double db= va_arg(ap, double);//读取下一个参数按照int
printf("%f", db);//整数转化字符串,挨个显示字符
break;

}
case '%':
{
putchar('%');
break;

}
default:
break;
}
pstar++;
}

}
va_end(ap);//读取结束
}

void main() {

myprintf("\n1234abc");
myprintf("\n1234abc%d",10);
myprintf("\n1234abc%d%s",10,"wuzhigang");
myprintf("\n1234abc%d%s%c", 10, "wuzhigang", 'A');

system("pause");
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: