久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

Mudos編程總結[推薦]

時間:2019-05-12 11:56:36下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《Mudos編程總結[推薦]》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Mudos編程總結[推薦]》。

第一篇:Mudos編程總結[推薦]

Mudos編程總結

1,Mudos系統調用系統 MudLib系統文件 的過程和一些特點

Mudos啟動以后先要尋找一個配置文件,用來配置MudLib文件系統的一些信息(這里時config.cfg),找不到就無法啟動。找到以后根據配置文件里面的參數進行初始化Mudos,然后調用配置文件里面的兩個入口文件,即simul_efun.c和master.c。首先載入simul_efun文件并生成一個特殊的全局對象,這個對象用于定義一些全局使用的函數,也可以重載Mudos中的Efun函數,這些新定義的文件使用起來和Efun是一樣的。然后系統會調用master.c文件并生成一個全局對象(主控對象),主控對象用于系統的全局控制,包括全局對象的加載,錯誤信息的跟蹤處理等。接下來,系統會根據主控對象中的定義,載入一些系統需要用到的全局對象。到此,Mudos系統就啟動完成了。

2、用戶連接系統后的處理過程。。

當用戶通過客戶端進行連接以后,Mudos系統會調用master對象特有的connect()函數,通過這個函數編程人員需要創建并返回一個用戶對象,系統會將用戶連接到這個用戶對象上,即是說這個用戶對象就代表了這個用戶。到此,就算完成了用戶的連接過程。

3、用戶的登陸后的處理過程

當Mudos系統調用master的connect函數創建并返回一個用戶對象以后,用戶對象會調用特有的logon()函數,這個函數用來把用戶的設置都設置好并進行游戲。注:最好在這里重新建立一個用戶對象,然后通過exec函數把用戶的連接轉移到新的對象上,然后刪除這個對象。

4、Mudos系統中的系統中 對象

simul_efun對象、master主控對象和用戶對象這三種對象都是系統提供的特殊對象,其 中simul_efun對象和master主控對象在系統中只有一個實例,即不能被clone也不能new創建,而用戶對象主要的作用就是用來創建用戶并完成初始化的對象,用戶每次登陸都會自動生成一個,用戶登陸完成后最好刪除它。這里需要指出主控對象和用戶對象都有特有的一些函數,這些函數提供給Mudos系統來調用的,用來完成一些系統需要處理的事情。

5、Master主控對象

object connect()程序連接后調用的函數,創建并返回一個用戶對象。string *epilog(int load_empty)返回一個包含物件文件名稱的數組, 其中所有的文件為啟動游戲之前必須預先載入的對象.void preload(string file)系統按照epilog函數返回的數組載入全局對象后調用次函數,用來判斷對象是否成功創建 static void crash(string error, object command_giver, object current_object)當系統異常終止(crash)時, 就調用主控物件中的此函數,用來記錄一些系統crash的log信息。void log_error(string file, string message)編譯程序發生任何錯誤系統都會調用此函數,用于發現是哪個對象出了什么錯誤。用于記錄編譯程序時出現的錯誤信息。

string error_handler(mapping error, int caught)主控物件處理錯誤的函數,此函數讓 mudlib 代替系統處理錯誤情形。用來處理系統運行時出現的錯誤信息。string get_root_uid()取得

root 使用者識別名稱需要獲取系統的uid時調用此函數。string get_bb_uid()取得骨架使用者識別名稱。string creator_file(string str)系統創建任何對象時都會調用此函數,用來獲得系統初始化對象的uid值。mixed compile_object(string file)提供虛擬對象,當系統無法按照給定的路徑載入對象時調用此函數。如果返回值是0,系統將不會載入這個對象,如果返回值是一個對象,系統會把這個對象當作是系統要載入的對象。一般來說,這里會返回一個void對象。string object_name(object ob)系統調用此函數以知曉一個物件的名稱。string domain_file(string str)返回一個指定對象所屬的區域,系統調用此函數來獲得對象的區域。string author_file(string str)返回一個指定對象所屬的作者,系統調用此函數來獲得對象的作者。int save_ed_setup(object who, int code)ed()函數儲存一個使用者的編輯程序設定或組態設定時調用 int retrieve_ed_setup(object who)ed()函數取得使用者的編輯程序設定或組態設定 string make_path_absolute(string file)ed()函數調用此函數以轉換文件的相對路徑名稱為絕對路徑名稱 string get_save_file_name(string fname)ed()函數使用者不正常斷線時, 此函數應返回與原來文件不同的名稱, 以免覆寫原來的文件 string privs_file(string file)為新創造的對象指定一個私有字符串。創建任何對象時系統都會調用此函數.對象的文件名稱為其參數,返回的字符串就用作此對象的私有字符串。void slow_shutdown(int minutes)告知 mud 目前正處于緩慢關閉的過程中.當系統無法從堆中配置更多的內存, 而只能使用保留的內存區塊時, 主控物件會調用此函數.此函數只有在組態文件中設定了「內存區塊保留大小」才會被調用.距離關閉時間還剩下幾分鐘則為此函數的參數.void flag(string)當系統啟動時, 處理 mudlib 所指定的特定標志.這個函數暫時還不是很了解。int valid_override(string file, string name)是否允許使用 efun:: 的情形,即是否允許運行efun重載前的函數。int valid_seteuid(object ob, string str)是否允許設定一個對象的euid。int valid_socket(object eff_user, string fun, mixed *info)是否允許調用socket 外部函數 int valid_asm(string file)

是否能使用asm{}來控制 LPC->C 編譯的物件 int valid_compile_to_c(string file)是否允許由 LPC->C 的方式編譯 int valid_hide(object who)是否允許一個對象具有匿蹤和看到匿蹤對象的能力 int valid_object(object ob)是否允許載入某個對象。int valid_save_binary(string filename)是否允許一個對象儲存它的源代碼 int valid_bind(object binder, object old_owner, object new_owner)是否允許bind()函數 即把某個對象的函數指針指向其他對象。int valid_write(string file, mixed user, string func)是否允許一個人有權限寫入一個文件 int valid_read(string file, mixed user, string func)是否允許一個人有權限讀取一個文件 int valid_shadow(object ob)控制哪些對象可以作為投影。int valid_link(string original, string reference)是否允許link()函數 int view_errors(object user)是否允許一個使用者看到錯誤消息 int valid_compile(string file)是否允許預先編譯文件,這是22.2b14新加的設置6、、、、用戶對象

void logon()主控對象conncet函數返回的用戶對象會直接調用次函數,用以對用戶對象的初始化處理。string process_input(string str)用戶輸入信息后調用此函數,字符串處理后再傳遞給本用戶對象,用來處理用戶輸入信息。void net_dead()當用戶對象斷線時, 系統調用此函數。用來處理用戶斷線后的事情。void terminal_type(string term_type)用戶對象登陸后調用,獲得用戶登陸的終端型號。void receive_message(string type, string str)用戶對象的消息處理函數,系統的message()函數會把消息分配給各個符合條件的用戶對象,用戶對象接收到消息后調用此函數來接收并處理消息。void catch_tell(string message);無論系統對

一個對象送出任何消息都會調用此函數來處理這些消息.消息可以依照需要顯示、丟棄、修改.此函數可以當作耳罩擋住某些消息, 也可以用于消息處理程序.void receive_snoop(string message);一個用戶對象窺視另一個用戶對象時, 所有窺視的文字會傳遞給用戶對象中的這個函數.在此函數中, 您可以處理這些文字.次函數的內容, 通常會再傳遞給 receive()函數.void telnet_suboption(string buffer);

獲得用戶終端的一些設置。void write_prompt(void);如果在用戶對象中有定義了次函數,則預設的提示符號該顯示時, 系統將調用此函數.當用戶正處于 input_to(輸入文字)和 ed(編輯程序)狀態時, 系統不會調用此函數7、、、、所有對象

void create(void);對象的構造函數,對象被系統載入后調用此函數來初始化對象。復制的對象也會調用。需要說明的是,系統第一次載入對象后會自動運行對象和其所有的父類中的create,復制的對象只運行對象自己的create。int id(string an_id);此函數被系統的present()函數調用, 以判斷一個指定的對象是否以字符串an_id為識別名稱id.如果an_id是此對象的識別名稱之一, 就返回 1, 不是則返回 0。void init(void);當系統把對象A放入對象B時(即調用move_object()函數),如果A是人物對象,讓A在B里調用A的init函數,同時調用B里面所有對象的init函數。不管A是不是人物對象,讓B里所有人物對象調用A的init函數。int move_or_destruct(object dest);如果一個對象的環境對象被摧毀了, 就調用此函數, 并用于它的內容對象.dest是正要被摧毀的對象.如果 dest 不存在, 則 dest 為 0.如果 dest 中的對象沒有把自己移出被摧毀的對象, 則也會被一起摧毀.int clean_up(int inherited);系統每過一段時間,對非激活對象調用 clean_up()函數.inherited指出此對象是否有別的對象繼承.如果返回 0,此對象將永遠不再調用 clean_up().如果返回 1, 則繼續判斷調用。通常一個對象在 clean_up()中所作的事, 是摧毀自己以節省內存.void reset(void);系統在每次reset之后(時間由系統設定),所有游戲中現存的對象都會調用reset()函數.reset()常用于檢查寶物或怪物是否還在某個房間, 以判斷要不要重新產生一份.8、、、、一些概念的說明

用戶對象用戶對象用戶對象用戶對象((((interactive()):):):):用戶連接的對象就是用戶對象,系統會調用用戶對象的一些方法來實現用戶的輸入輸出和消息處理等。如果用戶對象斷開連接,用戶對象就變成為普通對象。但是系統會記錄曾經是用戶對象的對象,通過userp()函數可以判斷一個對象是否曾經是用戶對象。人物人物人物人物對象對象對象對象(living())::::人物對象是曾經呼叫過 enable_commands()的對象,當然用戶對象也是人物對象。環境對象環境對象環境對象環境對象(environment())::::環境對象是通過move_object()函數激活的對象。激活激活激活激活對象對象對象對象::::在系統規定的(clear_up)時間內,曾經調用過init()函數的對象。復制復制復制復制對象對象對象對象(clonep())::::系統在第一次載入某個對象后會建立一個初始對象并存于系統內存中,以后每次重新建立對象包括new()、clone_object()、call_other()等都會通過拷貝這個初始對象來建立新的對象,每個拷貝出來的對象,系統都會指定一個遞增的數字標識此對象。這里需要說明的是,new()等函數建立對象時,如果初始對象不存在的話,系統會自動載入并初始化此對象,并把此對象定為初始對象,然后再拷貝一個對象作為new()等函數的返回值。系統建立初始對象的時候會由父到子的調用對象所有的create()函數,而拷貝出來的對象只調用對象本身的create()函數。游戲中存在的對象都是復制出來的對象。初始對象只有系統才能調用。

對象對象對象對象uid值值值值::::這個值只能通過主控對象中的creator_file()函數賦值或者export_uid()函數傳遞。指明當前對象的使用者名稱。對象對象對象對象euid值值值值::::對象有效的使用者名稱,可以通過seteuid和geteuid函數設置和讀取。對象的對象的對象的對象的繼承繼承繼承繼承、、、、構造及初始化構造及初始化構造及初始化構造及初始化::::Mudos啟動以后,可以自動或者通過函數調用來創建和復制各種對象,Mudos系統的作用就是用來管理這些對象。Mudos在生成對象的時候有兩種方式,一種是載入對象,一種是復制已經載入的對象。首先,Mudos是通過對象的文件名來尋找和定位對象的,當需要載入對象的時候,先檢查對象是否已經載入,如果沒有載入會檢查對象是否有需要繼承別的對象,如果需要就先載入需要繼承的對象,然后再載入并生成需要載入的對象。對象的繼承實際上是子對象先淺拷貝一份父對象(但不初始化),然后再構造自己。任何一個對象被載入內存或被復制出來都會執行create函數來初始化自己。9、、、、EFUN函數說明

This_object():這個函數返回由當前文件所建立或拷貝的對象。如果這個文件繼承了另一個文件,那么另一個文件中的這個函數也返回由這個文件所建立或拷貝的對象。previous_object(n):返回調用此函數的第前n個對象,previous_object(0)= previous_object(),表示返回調用此函數的對象。This_interactive():返回調用此函數的用戶對象。This_player():返回調用此函數的人物對象。This_player(1)返回This_interactive()Load_object():如果已經載入則返回已經載入的對象,否則載入對象并返回它。New():如果對象沒載入則載入對象,并復制一個對象返回,否則復制已經載入的對象返回。這里需要指出的是復制對象的過程并不會載入被復制對象所要繼承的對象。Clone_object():和new一樣,目前不知道有什么區別。replace_program():這個函數是用當前對象的繼承對象來替換當前對象,但是保留當前對象的全局變量。就是說如果被替換以后,當前對象就只有繼承對象的方法,而當前對象所定義的方法都不存在了。

第二篇:刀具和編程總結

① 白鋼刀(即高速鋼刀具)因其通體銀白色而得名,主要用于直壁加工。白鋼刀價格便宜,但切削壽命短、吃刀量小、進給速度低、加工效率低,在數控加工中較少使用。

② 飛刀(即鑲嵌式刀具)主要為機夾式可轉位刀具,這種刀具剛性好、切削速度高,在數控加工中應用非常廣泛,用于模胚的開粗、平面和曲面粗精加工效果均很好。

③ 合金刀(通常指的是整體式硬質合金刀具)精度高、切削速度高,但價格昂貴,一般用于精加工。

數控刀具與普通機床上所用的刀具相比,有以下不同的要求。

(1)剛性好(尤其是粗加工刀具)、精度高、抗振及熱變形小。

(2)互換性好,便于快速換刀。

(3)壽命高,切削性能穩定、可靠。

(4)刀具的尺寸便于調整,以減少換刀調整時間。

(5)刀具應能可靠地斷屑或卷屑,以利于切屑的排除。(6)系列化、標準化,以利于編程和刀具管理。

① 刀具直徑越大,轉速越慢;同一類型的刀具,刀桿越長,吃刀量就要減小,否則容易彈刀而產生過切。

② 白鋼刀轉速不可過快,進給速度不可過大。

③ 白鋼刀容易磨損,開粗時少用白鋼刀。

① 以上的飛刀參數只能作為參考,因為不同的飛刀材料其參數值也不相同,不同的刀具廠生產的飛刀其長度也略有不同。另外,刀具的參數值也因數控銑床或加工中心的性能和加工材料的不同而不同,所以刀具的參數一定要根據工廠的實際情況來設定。

② 飛刀的剛性好,吃刀量大,最適合模胚的開粗。另外,飛刀精加工陡峭面的質量也非常好。③ 飛刀主要是鑲刀粒的,沒有側刃,① 合金刀剛性好,不易產生彈刀,用于精加工模具的效果最好。

② 合金刀和白鋼刀一樣有側刃,精銑銅公直壁時往往使用其側刃。

① 刀具的名稱一般根據刀具的直徑和圓角半徑來定義,例如,直徑為30,圓角半徑為5的飛刀,其名稱定義為D30R5;直徑為12的平底刀,其名稱定義為D12;半徑為5的球刀,其名稱定義為R5。

② 輸入刀具名稱時,只需要輸入小寫字母即可,系統會自動將字母轉為大寫狀態。③ 設置刀具參數時,只需要設置刀具的直徑和底圓角半徑即可,其他參數按默認即可。加工時,編程人員還需要編寫加工工藝說明卡,注明刀具的類型和實際長度。

機床坐標一般在工件頂面的中心位置,所以創建機床坐標時,最好先設置好當前坐標,然后在〖CSYS〗對話框中設置“參考”為WCS。

加工模具時,其開粗余量多設為0.5,但如果是加工銅公余量就不一樣了,因為銅公(銅公是火花機放電加工用的電極)最后的結果是要留負余量的。

模具加工要求越高時,其對應的公差值就應該越小。

進行實體模擬驗證前,必須設置加工工件和毛坯,否則無法進行實體模擬。

第三篇:編程題總結

C作業匯總

1.short a,b=32767;/*short類型在內存中占2B*/ a=b+1;問:a的值是多少?并分析原因。

2.有一4位數整數,假設用abcd表示,請把這個4位數的每個數位用表達式表示出來。3.從鍵盤輸入圓的半徑r,計算并輸出圓的面積s(要求:半徑r定義為float型;圓周率?定義為符號常量;面積s保留2位小數)#define PI 3.14159 #include void main(){ float r,s;printf(“請輸入半徑r:n”);scanf(“%f”,&r);s=PI*r*r;printf(“面積是:%.2fn”,s);}

4.輸入m>=3的正整數,判斷m是否素數。畫出算法流程圖及NS圖

5.有一函數:

x?1 ?x ?y??2x?1 1?x?10

?3x-11 x?10 ?寫一段程序,輸入x,輸出y值。

要求x,y聲明為float類型,y保留2位小數。#include void main(){ float x,y;printf(“請輸入x的值:n”);scanf(“%f”,&x);

if(x<1)

y=x;else

if(x<10)

y=2*x-1;

else

y=3*x-11;

}

printf(“y=%.2fn”,y);

x3x5x7x9?????,6.課后習題4.17(P159)利用泰勒級數sinx?x?計算sinx的3!5!7!9!值。要求最后一項的絕對值小于10,并統計出此時累加了多少項。#include #include void main(){ float x,sinx=0;float term;

/*記錄每個項數*/ int n=1,count=0;/*count記錄累加了多少項*/

printf(“請輸入x值(弧度):n”);scanf(“%f”,&x);

term=x/n;while(fabs(term)>1e-5)

/* while循環*/ {

sinx+=term;

count++;

n+=2;

term=-term*x*x/((n-1)*n);}

/* do

/*do while循環*/ {

sinx+=term;

count++;

n+=2;

term=-term*x*x/((n-1)*n);}while(fabs(term)>1e-5);

*/

printf(“sin(%.2f)=%.4fn”,x,sinx);printf(“一共累加了:%d項。n”,count);}

7.用牛頓迭代法求下面方程在1.5附近的根:

2x?4x?3x?6?0 32?5

牛頓迭代公式:

x1?x0?f(x0)f?(x0)

#include #include void main(){ float x0,x1=1.5;float y1,y2;

/*y1記錄f(x0),y2記錄f(x0)的導數*/

do {

x0=x1;

y1=2*x0*x0*x0-4*x0*x0+3*x0-6;

y2=6*x0*x0-8*x0+3;

x1=x0-y1/y2;}while(fabs(x1-x0)>1e-5);

printf(“the root is:%.2fn”,x1);}

8.寫一函數,輸入一個16進制整數,輸出相應的10進制數。例:從鍵盤輸入2a,輸出結果是42。

要求:若輸入數據不合法,則輸出提示信息。如輸入了35g,輸出“您輸入的16進制數不合法!”。

#include #include void main(){ char c;int sum=0;

printf(“請輸入一個16進制數字:n”);

while((c=getchar())!='n'){

if(c>='0' && c<='9')

sum=sum*16+c-'0';

else

if(c>='a' && c<='f')

sum=sum*16+c-87;

else

if(c>='A' && c<='F')

sum=sum*16+c-55;

else

{

printf(“您輸入的16進制不合法.n”);

exit(0);

} }

printf(“相應的10進制數是:%dn”,sum);} 方法2:用字符串處理的方式 #include #include void main(){ char str[20];int i,sum=0;

printf(“請輸入一個16進制數字:n”);gets(str);

for(i=0;str[i];i++){

if(str[i]>='0' && str[i]<='9')

sum=sum*16+str[i]-'0';

else

if(str[i]>='a' && str[i]<='f')

sum=sum*16+str[i]-87;

else

if(str[i]>='A' && str[i]<='F')

sum=sum*16+str[i]-55;

else

{

printf(“您輸入的16進制不合法.n”);

exit(0);

} }

printf(“相應的10進制數是:%dn”,sum);} 方法3:用字符數組及指針處理的方式 #include #include void main()

{ char str[20],*p=str;int sum=0;

printf(“請輸入一個16進制數字:n”);gets(p);

while(*p){

if(*p>='0' && *p<='9')

sum=sum*16+*p-'0';

else

if(*p>='a' && *p<='f')

sum=sum*16+*p-87;

else

if(*p>='A' && *p<='F')

sum=sum*16+*p-55;

else

{

printf(“您輸入的16進制不合法.n”);

exit(0);

}

p++;}

printf(“相應的10進制數是:%dn”,sum);} 9.編寫一個小函數,其功能是計算兩個整數的平均值,該函數要在主函數中調用。

#include void main(){ int x,y;float avg;float average(int,int);printf(“輸入x,y的值,用空格分隔兩個數:n”);scanf(“%d%d”,&x,&y);

avg=average(x,y);

printf(“%d,%d的平均值是:%.2fn”,x,y,avg);}

float average(int x,int y)

{ return(x+y)/2.0;}

10.有N(N用宏定義為符號常量)個元素的一維整型數組,該數組中各元素值從鍵盤隨機輸入。然后,將這個整型數組中的值逆序存放。例如,原來5個元素的順序為8、1、4、6、5,逆序之后各元素的值是5、6、4、1、8 #define N 5 #include void main(){ int a[N];int i,t;

printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i

scanf(“%d”,&a[i]);

printf(“數組原來的值是:n”);for(i=0;i

printf(“%dt”,a[i]);

for(i=0;i

t=a[i];

a[i]=a[N-1-i];

a[N-1-i]=t;}

printf(“n逆序之后數組的值是:n”);for(i=0;i

printf(“%dt”,a[i]);

printf(“n”);} 11.有N(N用宏定義為符號常量)個元素的一維整型數組,該數組中各元素值從鍵盤隨機輸入。然后,對該數組元素進行由小到大排序(要求,該功能用函數實現),輸出數組中各元素值。最后,從鍵盤隨機輸入一個整數,并把該整數插入上述數組中(該功能用函數實現),使得插入該整數后的數組仍然有序,輸出數組中各元素的值。#define N 5 #include void main(){ int a[N+1];

int i,x;void sort(int array[],int n);void insert(int array[],int n,int x);

printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i

scanf(“%d”,&a[i]);

sort(a,N);

/*調用sort對數組進行排序*/

printf(“n升序排序之后數組的值是:n”);for(i=0;i

printf(“%d

”,a[i]);

printf(“n輸入一個x值插入到數組中:n”);scanf(“%d”,&x);

insert(a,N,x);

printf(“n插入%d之后數組的值是:n”,x);for(i=0;i

printf(“%d

”,a[i]);

printf(“n”);}

void sort(int array[],int n)/*用選擇法對數組array升序排序*/ { int i,j,t,min;

for(i=0;i

min=i;

for(j=i+1;j

if(array[j]

min=j;

if(min!=i)

{

t=array[i];

array[i]=array[min];

array[min]=t;

} } }

void insert(int array[],int n,int x){ int i,pos;

for(i=0;i

pos=i;

for(i=n-1;i>=pos;i--)

array[i+1]=array[i];

array[pos]=x;}

12.有一整型數組,N(N用宏定義為符號常量)個元素,該數組中各元素值從鍵盤隨機輸入。從鍵盤隨機輸入一個整數x,刪除該數組中值與x相同的所有元素(該功能用函數實現),輸出數組中各元素的值。#define N 5 #include void main(){ int a[N];int i,x,n;int delet(int a[],int n,int x);

printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i

scanf(“%d”,&a[i]);

printf(“數組原來的值是:n”);for(i=0;i

printf(“%dt”,a[i]);

printf(“n請輸入要刪除的值x:n”);scanf(“%d”,&x);

n=delet(a,N,x);

/*n值是刪除與x相同的元素后,數組剩余元素的個數。*/

printf(“刪除%d之后數組的值是:n”,x);for(i=0;i

printf(“%d

”,a[i]);

printf(“n”);

}

int delet(int a[],int n,int x){ int i,j;

for(i=0,j=0;i

if(a[i]!=x)

a[j++]=a[i];

return j;}

13.從鍵盤隨機輸入一字符串,將所有ASCII值為偶數的字符輸出。例如:輸入abc123,輸出結果是b2(因為b的ASCII值是98,2的ASCII值是50,其他字符的ASCII值都是奇數)

#include #define N 40 void main(){ char str[N];int i;

printf(“輸入字符串:n”);gets(str);

printf(“ASCII碼是偶數的字符有:”);for(i=0;str[i];i++)

if(str[i]%2==0)putchar(str[i]);

printf(“n”);}

14.從鍵盤輸入兩個字符串s1,s2,把s2連接到s1的末尾。不能用strcat函數 #include #define N 40 void main(){ char str1[N],str2[N];void mystrcat(char *p1,char *p2);

printf(“輸入兩個字符串,輸入回車鍵結束:n”);gets(str1);gets(str2);

mystrcat(str1,str2);

printf(“連接在一起的字符串是:n”);puts(str1);

}

void mystrcat(char *p1,char *p2){ while(*p1)p1++;while(*p2)

*p1++=*p2++;*p1='

主站蜘蛛池模板: 色偷偷av亚洲男人的天堂| 免费无码鲁丝片一区二区| 国产精品色无码av在线观看| 国产丰满乱子伦无码| 久久久精品午夜免费不卡| 天干天干啦夜天干天2017| 久久天天躁狠狠躁夜夜2020| 精品日本免费一区二区三区| 国产免费网站看v片在线无遮挡| 中文字幕亚洲综合久久| 人妻少妇一区二区三区| 国色天香天天影院综合网| 中文字幕无码肉感爆乳在线| 69国产精品成人aaaaa片| 18禁黄污吃奶免费看网站| 色一情一乱一伦麻豆| 日本护士毛茸茸| 一本久道中文无码字幕av| 精品一区二区成人精品| 末发育娇小性色xxxx| 欧美三级视频| 69国产成人综合久久精品| 日韩一区二区三区射精| 亚洲啪av永久无码精品放毛片| 亚洲国产欧美日本视频| 男女做aj视频免费的网站| 国产乱女婬av麻豆国产| 久久精品人人做人人爽老司机| 四川丰满妇女毛片四川话| 任我爽精品视频在线观看| 国产农村妇女野外牲交视频| 国产精品美女久久久久av爽| 亚洲成av人在线观看成年美女| 最新永久无码av网址亚洲| 国产亚洲美女精品久久久2020| 无码丰满少妇2在线观看| 亚洲av综合久久九九| 午夜伦4480yy私人影院| 中文 在线 日韩 亚洲 欧美| 少妇扒开双腿让我看个够| 国产午夜人做人免费视频网站|