新聞中心
C語言問題 實(shí)現(xiàn)在字符串的內(nèi)部刪除字符串的函數(shù)del。
#includestdio.h
為城固等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及城固網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、城固網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
void?del(char?*?s,int?n,int?len)
{char?*p;
s+=n;
for(p=s+len;*s++=*p++;);
}
int?main()
{char?s[]="apple";
if(s==NULL||n0)
{printf("error");
return?0;
}
del(s,2,2);
puts(s);
return?0;
}
C++ delete命令的原理是什么?
我們編譯出來的程序運(yùn)行時(shí)是和操作系統(tǒng)打交道的,程序中用到的內(nèi)存都向操作系統(tǒng)申請(qǐng),在多任務(wù)的操作系統(tǒng)下,不允許普通的程序訪問未分配的內(nèi)存。
操作系統(tǒng)手里有一張表,標(biāo)明內(nèi)存中的哪些單元被哪個(gè)程序占用了,哪些是空閑的(空閑不一定是空值,我們編寫的程序如果動(dòng)態(tài)變量沒有初始化往往會(huì)帶有不定值,就是這個(gè)緣故),當(dāng)程序提出申請(qǐng),它就把空閑的內(nèi)存分配給程序。程序運(yùn)行完后操作系統(tǒng)再把分配給的內(nèi)存標(biāo)記為空閑,以供其他程序用。
其實(shí)我們完全留意到,向磁盤寫東西的時(shí)候很慢,但把寫進(jìn)了的東西刪掉的時(shí)候卻快得多,原因就在于操作系統(tǒng)刪除文件的時(shí)候偷懶了,并沒有徹底粉碎文件的每一個(gè)數(shù)據(jù),而是在那張文件分配表上將這個(gè)文件所在的區(qū)域標(biāo)記為空閑罷了,多數(shù)數(shù)據(jù)仍然在那里,從而給數(shù)據(jù)恢復(fù)軟件留下了后門。
樓主的程序前面會(huì)申請(qǐng)空間來存放類A和B的對(duì)象。執(zhí)行到delete就會(huì)去內(nèi)存的堆區(qū)將指定的內(nèi)存單元交還給操作系統(tǒng)。所以必須和new配套使用,否則會(huì)釀成嚴(yán)重后果。
我個(gè)人的猜測,執(zhí)行delete只是將它后面變量的地址告訴給操作系統(tǒng),操作系統(tǒng)把它手里的那張表給改了,但delete掉的指針沒有變化,還是原來指向的變量的地址值。可以運(yùn)行一下這個(gè)小程序:
#include iostream.h
int main(void)
{
int *p;
p=new int;
cout(unsigned int)pendl;//1
delete p;
cout(unsigned int)pendl;//2
p=NULL;
coutp;
return 0;
}
可以看到,delete前后,指針p的值沒有變化。但是如果將2處改為cout*p;就要出問題了,操作系統(tǒng)會(huì)阻止程序去訪問這個(gè)地址(表現(xiàn)為訪問沖突,Access Violation),因?yàn)檫@個(gè)地址已經(jīng)用delete歸還給操作系統(tǒng)了。這時(shí)候的指針p叫做懸空狀態(tài),也就是野指針,怎么稱呼都無所謂。它并沒有被銷毀,通過重新取其他變量的地址,還可以繼續(xù)訪問*p,但現(xiàn)在不行。
指針實(shí)際上是一個(gè)無符號(hào)整型變量,幾乎所有我們碰到的指針,在C++下都是4個(gè)字節(jié),因?yàn)镃++在32位機(jī)上將int實(shí)現(xiàn)得和long int一樣大小。
那么為什么要給指針規(guī)定類型呢?我猜測,這一方面是為了訪問它指向的對(duì)象時(shí)確定讀取內(nèi)存單元的長度,比如char型變量占1個(gè)字節(jié),int型變量占4個(gè)字節(jié),類對(duì)象和結(jié)構(gòu)體對(duì)象占的長度更加多樣化,當(dāng)定義了一個(gè)char型指針p,執(zhí)行*p時(shí)程序只讀取一個(gè)字節(jié)的內(nèi)容,如果p是int型則*p讀取4個(gè)連續(xù)的字節(jié)的內(nèi)容。還有指針相加減,指針自增自減運(yùn)算,都可以通過這個(gè)來確定一次移動(dòng)的長度。
另一方面,也防止亂指發(fā)生意外吧,C語言中printf和scanf的格式控制串就要用的時(shí)候親自設(shè)定,如果設(shè)不對(duì)運(yùn)行時(shí)就可能出錯(cuò)。
c語言刪除原理
我們編譯出來的程序運(yùn)行時(shí)是和操作系統(tǒng)打交道的,程序中用到的內(nèi)存都向操作系統(tǒng) 其實(shí)我們完全留意到,向磁盤寫東西的時(shí)候很慢,但把寫進(jìn)了的東西刪掉的時(shí)候卻快
要看系統(tǒng)是用什么來存這些信息的,如果用是數(shù)據(jù)庫,那就是用sql語句刪除.如果只是簡單的文件讀寫,那是先把學(xué)生全部信息讀進(jìn)來,可能放到一個(gè)vector list map這些容器中,然后進(jìn)去刪除,再然再把它們寫回文件去.
#include "stdio.h"#define maxlen 100 typedef struct{ //定義結(jié)構(gòu)體 int data[100]; int last+1)) //判讀刪除的位置是否合法 { printf("參數(shù)出錯(cuò)!"); } else{ //刪除的位
head是頭指針,p1是指向第一個(gè)結(jié)點(diǎn)的指針,p2是指向p1 首先對(duì)單向鏈表的刪除要考慮以下4種情況:1.鏈表本身是空的2.刪除的是鏈表的首結(jié)
delete是和new一起使用的,如果要使用delete的話意味意著你前面創(chuàng)建鏈表的時(shí)候有使用new創(chuàng)建每一個(gè)節(jié)點(diǎn).如果前面沒有new的話后面就不能使用delete.
存儲(chǔ)在硬盤中的每個(gè)文件都可分為兩部分:文件頭和存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)區(qū).文件頭用來 都沒有將數(shù)據(jù)從數(shù)據(jù)區(qū)直接刪除. 由文件刪除的原理可知,要徹底刪除數(shù)據(jù),只有把
程序自刪除的方式有很多,不過最終的思想不過是關(guān)閉本身進(jìn)程,開啟新進(jìn)程用于刪除自身.下面這個(gè)方法是用windows自帶命令行程序?qū)崿F(xiàn)刪除.命令行為 cmd.exe /c
不用鏈表就用數(shù)組a[],記錄條數(shù)為n假設(shè)刪除a[i],就把從i+1向后到n的所有記錄向前移一位修改直接改就是了
Person * del(Person * head,int a){//查找并刪除結(jié)點(diǎn) Person *p,*temp; p=head; while(p!=NULL||(p-next)!=NULL){ //這個(gè)判斷條件可能為真嗎?兩邊需要都為假,即p ==
用remove函數(shù)功 能: 刪除一個(gè)文件 用 法: int remove( const char *filename);頭文件:在Visual C++ 6.0中可以用stdio.h返回值:如果刪除成功,remove返回0,否則返回EOF(-1).
C語言的刪除函數(shù)
樓主的意思是在str1中刪除str2中出現(xiàn)的字符?那么改成:
#includestdio.h
void main ()
{
char str1[9]={'t','i','n','m','f','g','y','f','s'};
char str2[3]={'A','s','g'};
int i,k,l;
for(i=0;i9;i++)
{
l=0;
for(k=0;k3;k++)
{
if (str1[i]=str2[k])
{l=1;break;}
}
if l!=1
printf("%c",str1[i]);
}
}
網(wǎng)站標(biāo)題:c語言中刪除函數(shù)的原理 c語言刪除語句
當(dāng)前路徑:http://www.ef60e0e.cn/article/ddjgecj.html