Windwos安裝Apache服務器軟件,進行測試。Localhost
將可執行程序xxx.exe改為xxx.cgi放到apache服務器上,通過浏覽器進行訪問。
#define _CRT_SECURE_NO_WARNINGS #include#include #include void main() { printf(Content-type:text/html ); printf(%s , getenv(QUERY_STRING));//打印環境變量 char szPost[256] = {0}; gets(szPost);//獲取輸入 printf(%s , szPost);//獲取輸入 //BBB=tasklist&AAA=%C7%EB%BD%F8 char *p = szPost + 4;//0,1,2,3 char *p1 = strchr(szPost, '&'); *p1 = ''; char cmd[256] = { 0 }; sprintf(cmd, %s >1.txt, p);//字符串映射 system(cmd); FILE *pf = fopen(1.txt, r); while (!feof(pf))//如果沒有到文件末尾就繼續 { char ch = fgetc(pf); if (ch == ' ') { printf( );//換行 } else { putchar(ch);//打印字符 } } }
#include#include //最寬基本基本成員,char , int,double,結構體數組都不是最寬基本成員 //結構體大小必須可以整除最寬基本成員,是最寬基本成員的整數倍 //結構體成員地址減去結構體首地址,就是偏移量,偏移量必須可以整除成員的基本類型 struct info { char c;//1 2 4 8 double sh;//1 2 4 8 char ch[9];//9 10 12 16 }; struct info1 { short sh1; //8 4 //2 int sh; //8 4 //4 char ch[19]; //16 20 //19 }; void main2() { struct info1 info11 = {10,200,123456}; printf(%p , &info11); printf(%p , &info11.sh1); printf(%p , &info11.sh); printf(%p , &info11.ch); getchar(); } void main1() { printf(%d, sizeof(struct info1)); system(pause); }
#define _CRT_SECURE_NO_WARNINGS #include#include #include struct string { char *p; int length; }; void main11() { struct string str1; str1.length = 10; str1.p =(char *) malloc(sizeof(char)* 10); strcpy(str1.p, hello); printf( str1.p=%s, str1.p);//輸出結果 struct string str2; str2.length = str1.length; str2.p = str1.p; *(str1.p) = 'k';//淺拷貝,共享內存 printf( str2.p=%s, str2.p);//輸出結果 system(pause); } void main123() { struct string str1; str1.length = 10; str1.p = (char *)malloc(sizeof(char)* 10); strcpy(str1.p, hello); printf( str1.p=%s, str1.p);//輸出結果 struct string str2; str2.length = str1.length; str2.p =(char *) malloc(sizeof(char)* 10); strcpy(str2.p, str1.p);//拷貝內存內容 *(str1.p) = 'k'; //深拷貝是拷貝內存的內容, printf( str2.p=%s, str2.p);//輸出結果 system(pause); }
//隊列.h
#include#include #define N 100 //定義隊列最大多少個 #define datatype char //定義隊列的數據類型 struct queue { datatype data[N];//保存數據的數組 int front;//數據的開頭 ,拉屎 int rear;//數據的結尾,吃進去 }; typedef struct queue Q;//給已經有的類型簡化一下 void init(Q * myqueue);//初始化隊列 int isempty(Q * myqueue);//判斷是否為空,1代表為空,0代表不為空 void enQueue(Q * myqueue, datatype num);//入隊,吃進去 datatype DeQueue(Q * myqueue);//出隊,拉屎,返回值就是拉的 void printfQ(Q * myqueue);//打印隊列所有的元素 datatype gethead(Q * myqueue);//獲取開頭的一個節點
//隊列.c
#include隊列.h
void init(Q * myqueue)//初始化隊列
{
myqueue->front = myqueue->rear = 0;//表示為空
}
int isempty(Q * myqueue)//判斷為空
{
if (myqueue->front == myqueue->rear)
{
return 1;
}
else
{
return 0;
}
}
void enQueue(Q * myqueue, datatype num)
{
if (myqueue->rear == N)
{
printf(吃東西失敗);
return ;//失敗
}
else
{
myqueue->data[myqueue->rear] = num;//賦值
myqueue->rear += 1;//增加一個
}
}
datatype DeQueue(Q * myqueue) //拉屎的過程
{
if (myqueue->front == myqueue->rear)
{
printf(拉屎失敗);
return -1;
}
else
{
myqueue->front += 1;//拉屎
return myqueue->data[myqueue->front - 1];//返回你拉的
}
}
void printfQ(Q * myqueue)//打印隊列所有的元素
{
printf(
);
if (myqueue->front == myqueue->rear)
{
printf(
你的腸胃為空);
}
else
{
for (int i = myqueue->front; i < myqueue->rear;i++)
{
printf(%c , myqueue->data[i]);//顯示你的腸胃
}
}
}
datatype gethead(Q * myqueue)
{
if (myqueue->front == myqueue->rear)
{
printf(
腸胃為空,無法找到你要最先拉的屎);
return -1;
}
else
{
return myqueue->data[myqueue->front];//返回第一個節點
}
}
//main.c
#include#include #include隊列.h void main() { Q Q1;//創建一個結構體變量 init(&Q1);//初始化 enQueue(&Q1, 'A'); printfQ(&Q1); enQueue(&Q1, 'B'); printfQ(&Q1); enQueue(&Q1, 'C'); printfQ(&Q1); enQueue(&Q1, 'D'); printfQ(&Q1); enQueue(&Q1, 'E'); printfQ(&Q1); DeQueue(&Q1); printfQ(&Q1); DeQueue(&Q1); printfQ(&Q1); DeQueue(&Q1); printfQ(&Q1); DeQueue(&Q1); printfQ(&Q1); DeQueue(&Q1); printfQ(&Q1); DeQueue(&Q1); printfQ(&Q1); system(pause); }
//字符串.h
#define _CRT_SECURE_NO_WARNINGS #include#include #include //字符串封裝,需要庫函數 //不需要庫函數 struct CString { char *p;//保存字符串首地址 int reallength;//實際長度 }; typedef struct CString mystring;//簡寫 //字符串,初始化,打印, //查找,查找字符,查找字符串 //尾部增加,(字符,字符串) //刪除(字符,字符串), //任意位置增加(字符,字符串) ////修改字符串,(字符,字符串替換) void init(mystring *string);//原封不動初始化 void initwithlength(mystring *string,int length);//開辟長度,內存清零 void initwithstring(mystring *string,char *copystring);//初始化並拷貝字符串 void printfstring(mystring *string); //打印 void backaddchar(mystring *string,char ch);//增加字符 void backaddstring(mystring *string,char*str);//增加字符串 void run(mystring *string);//執行指令 char * findfirstchar(mystring *string, char ch);//返回第一個找到的字符的地址 char * findfirststring(mystring *string, char *str);//返回第一個找到的字符串的地址 int deletefirstchar(mystring *string,const char ch);//刪除第一個找到的字符 int deletefirststring(mystring *string, char * const str);//刪除第一個找到的字符串 void addchar(mystring *string, char ch,char *pos);//任意增加字符 void addstring(mystring *string, char*str,char *pos);//任意增加字符串 void changefirstchar(mystring *string, const char oldchar, const newchar);//改變字符 void changefirststring(mystring *string, char * const oldstring, char *const newstring);//改變字符串
//字符串.c
#include字符串.h
int mystrlen(char *p)
{
if (p == NULL)
{
return -1;//失敗,
}
int length = 0;
while (*p != '')//字符串終止條件
{
length++;//長度自增
p++;//指針不斷向前
}
return length;
}
char *mystrcpy(char *dest, const char *source)//const限定不被意外修改
{
if (dest == NULL || source == NULL)
{
return NULL;//為空沒有必要干活了
}
char * destbak = dest;
while (*source != '')//一直拷貝
{
*dest = *source;//賦值字符
source++;
dest++;//指針不斷向前,字符挨個賦值
}
*dest = '';//結尾
return destbak;//返回地址
}
char *mystrcat(char *dest, const char *source)
{
if (dest == NULL || source == NULL)
{
return NULL;//失敗
}
else
{
char *destbak = dest;//保留地址
while (*dest != '')
{
dest++;//指針向前移動
}
//從尾部開始拷貝
while (*source != '') //循環被被拷貝的字符串
{
*dest = *source;//字符串賦值
dest++;
source++;
}
*dest = '';//結尾
return destbak;
}
}
char * mystrchr(const char *dest, const char ch)
{
if (dest == NULL)
{
return NULL;
}
while (*dest!='')
{
if (*dest == ch)
{
return dest;//找到返回地址
}
dest++;
}
return NULL;//返回
}
char *mystrstr(const char * const dest, const char * const findstr)
{
if (dest == NULL || findstr == NULL)
{
return NULL;
}
char *destbak = dest;
char *p = NULL;//保存找到的地址
while (*destbak != '')
{
int flag = 1;//假定是相等
char *findstrbak = findstr;
char *nowdestbak = destbak;
while (*findstrbak != '')
{
if (*nowdestbak != '')
{
if (*findstrbak != *nowdestbak)//有一個不等
{
flag = 0;//賦值為0代表不等
}
nowdestbak++;
findstrbak++;
}
else
{
flag = 0;//設置標識
break;
}
}
if (flag == 1)
{
p = destbak;//當前位置
return p;
}
destbak++;
}
return NULL;
}
void init(mystring *string)
{
string->p = NULL;
string->reallength = 0;//初始化結構體字符串
}
void initwithlength(mystring *string, int length)
{
//string->p =(char *) malloc(sizeof(char)*length);//分配內存
string->p = (char *)calloc(length, sizeof(char));//分配內存並清零
string->reallength = length;//長度
}
void initwithstring(mystring *string, char *copystring)
{
int length = strlen(copystring);//獲取字符串長度
string->p =(char *) calloc(length + 1, sizeof(char));//分配內存
mystrcpy(string->p, copystring);//拷貝字符串
string->reallength = length + 1;//設置長度
}
void backaddchar(mystring *string,char ch)
{
if (mystrlen(string->p)+1==string->reallength)//意味著滿了
{
//重新分配內存
string->p = realloc(string->p, string->reallength + 1);
string->reallength += 1;
string->p[string->reallength - 2] = ch;
string->p[string->reallength - 1] = '';
}
else
{
int nowlength = mystrlen(string->p);//求出當前長度
string->p[nowlength] = ch;
string->p[nowlength + 1] = '';//字符的增加
}
}
void backaddstring(mystring *string, char*str)
{
int nowmystringlength = mystrlen(string->p);//獲取當前長度
int addstringlength = mystrlen(str);//要增加的長度
if (nowmystringlength + addstringlength+1 >string->reallength)//判定是否越界
{
int needaddlength = nowmystringlength + addstringlength + 1 - (string->reallength);
//printf(%d, needaddlength);
string->p = (char *)realloc(string->p, string->reallength + needaddlength);//增加字符串長度
mystrcat(string->p, str);//拷貝字符串
string->reallength += needaddlength;//增加長度
}
else
{
mystrcat(string->p, str);//拷貝字符串
}
}
void printfstring(mystring *string)
{
printf(
string=%s, string->p);//打印字符串
}
void run(mystring *string)
{
system(string->p);//執行指令
}
char * findfirstchar(mystring *string, char ch)
{
char *p = mystrchr(string->p, ch);//查找
return p;
}
char * findfirststring(mystring *string, char *str)
{
char *pres = mystrstr(string->p, str);
return pres;//返回地址
}
int deletefirstchar(mystring *string, const char ch)
{
char *p = mystrchr(string->p, ch);//查找
if (p == NULL)
{
return 0;
}
else
{
char *pnext = p + 1;
while (*pnext != '')
{
*p = *pnext; //刪除一個字符整體向前移動
p++;
pnext++;
}
*p = '';//字符串要有結尾
return 1;
}
}
int deletefirststring(mystring *string, char * const str)
{
char *pres = mystrstr(string->p, str);//查找
if (pres == NULL)
{
return 0;
}
else
{
int length = mystrlen(str);//求字符串長度
char *pnext = pres + length;//下一個字符
while (*pnext != '')
{
*pres = *pnext; //刪除一個字符整體向前移動
pres++;
pnext++;
}
*pres = '';//字符串要有結尾
return 1;
}
}
void addchar(mystring *string, char ch, char *pos)
{
if (pos == NULL || string ==NULL)
{
return;
}
if(mystrlen(string->p) + 1 == string->reallength)//意味著滿了
{
//重新分配內存
string->p = realloc(string->p, string->reallength + 1);
string->reallength += 1;
int nowlength = mystrlen(string->p);//求出當前長度
int movelength = mystrlen(pos);//求出現在要移動的長度
for (int i = nowlength; i > nowlength - movelength; i--)//移動
{
string->p[i] = string->p[i - 1];//輪詢
}
string->p[nowlength - movelength] = ch;//插入
string->p[nowlength + 1] = '';//結尾
}
else
{
int nowlength = mystrlen(string->p);//求出當前長度
int movelength = mystrlen(pos);//求出現在要移動的長度
for (int i = nowlength; i > nowlength-movelength; i--)//移動
{
string->p[i] = string->p[i - 1];//輪詢
}
string->p[nowlength - movelength]=ch;//插入
string->p[nowlength + 1] = '';//結尾
}
}
void addstring(mystring *string, char*str, char *pos)//任意增加字符串
{
if (pos == NULL || string == NULL)
{
return;
}
int nowmystringlength = mystrlen(string->p);//獲取當前長度
int addstringlength = mystrlen(str);//要增加的長度
if (nowmystringlength + addstringlength + 1 >string->reallength)//判定是否越界
{
int needaddlength = nowmystringlength + addstringlength + 1 - (string->reallength);
//printf(%d, needaddlength);
string->p = (char *)realloc(string->p, string->reallength + needaddlength);//增加字符串長度
string->reallength += needaddlength;//增加長度
//先移動,再拷貝
int nowlength = mystrlen(string->p);//求出當前長度
int movelength = mystrlen(pos);//求出現在要移動的長度
int insertlength = strlen(str);//要求出插入的長度
for (int i = nowlength; i >=nowlength-movelength ; i--)
{
string->p[i + insertlength]=string->p[i];//字符移動
}
for (int j = 0; j < insertlength;j++)
{
string->p[nowlength-movelength+j]= str[j];//賦值拷貝
}
}
else
{
int nowlength = mystrlen(string->p);//求出當前長度
int movelength = mystrlen(pos);//求出現在要移動的長度
int insertlength = strlen(str);//要求出插入的長度
for (int i = nowlength; i >= nowlength - movelength; i--)
{
string->p[i + insertlength] = string->p[i];//字符移動
}
for (int j = 0; j < insertlength; j++)
{
string->p[nowlength - movelength + j] = str[j];//賦值拷貝
}
}
}
void changefirstchar(mystring *string, const char oldchar, const newchar)//改變字符
{
char *pstr = string->p;
while (*pstr != '')
{
if (*pstr == oldchar)//查找
{
*pstr = newchar;//賦值
return;
}
pstr++;
}
}
void changefirststring(mystring *string, char * const oldstring, char *const newstring)//改變字符串
{
char *pfind = findfirststring(string, oldstring);//找到位置
if (pfind != NULL)
{
deletefirststring(string, oldstring);//刪除
addstring(string, newstring, pfind);//插入
}
}
//main.c
#include#include #include字符串.h void main() { mystring string1; initwithstring(&string1, note); printfstring(&string1); //backaddchar(&string1, 'd'); backaddstring(&string1, padnotepadnotepad); printfstring(&string1); while (findfirststring(&string1,notepad)) { changefirststring(&string1, notepad, 123456789); } //char *p = findfirstchar(&string1, 't'); //if (p != NULL) //{ // addstring(&string1, 12345, p); //} //deletefirstchar(&string1, 'e'); //deletefirststring(&string1, pad); //char *strp = findfirstchar(&string1, 'a'); //*strp = 'A'; /*char *strp = findfirststring(&string1, ada); if (strp != NULL) { *strp = 'X'; }*/ printfstring(&string1); //run(&string1); system(pause); }