重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
为城固等地区用户提供了全套网页设计制作服务,及城固网站建设行业解决方案。主营业务为成都网站建设、网站制作、城固网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
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;
}
我们编译出来的程序运行时是和操作系统打交道的,程序中用到的内存都向操作系统申请,在多任务的操作系统下,不允许普通的程序访问未分配的内存。
操作系统手里有一张表,标明内存中的哪些单元被哪个程序占用了,哪些是空闲的(空闲不一定是空值,我们编写的程序如果动态变量没有初始化往往会带有不定值,就是这个缘故),当程序提出申请,它就把空闲的内存分配给程序。程序运行完后操作系统再把分配给的内存标记为空闲,以供其他程序用。
其实我们完全留意到,向磁盘写东西的时候很慢,但把写进了的东西删掉的时候却快得多,原因就在于操作系统删除文件的时候偷懒了,并没有彻底粉碎文件的每一个数据,而是在那张文件分配表上将这个文件所在的区域标记为空闲罢了,多数数据仍然在那里,从而给数据恢复软件留下了后门。
楼主的程序前面会申请空间来存放类A和B的对象。执行到delete就会去内存的堆区将指定的内存单元交还给操作系统。所以必须和new配套使用,否则会酿成严重后果。
我个人的猜测,执行delete只是将它后面变量的地址告诉给操作系统,操作系统把它手里的那张表给改了,但delete掉的指针没有变化,还是原来指向的变量的地址值。可以运行一下这个小程序:
#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;就要出问题了,操作系统会阻止程序去访问这个地址(表现为访问冲突,Access Violation),因为这个地址已经用delete归还给操作系统了。这时候的指针p叫做悬空状态,也就是野指针,怎么称呼都无所谓。它并没有被销毁,通过重新取其他变量的地址,还可以继续访问*p,但现在不行。
指针实际上是一个无符号整型变量,几乎所有我们碰到的指针,在C++下都是4个字节,因为C++在32位机上将int实现得和long int一样大小。
那么为什么要给指针规定类型呢?我猜测,这一方面是为了访问它指向的对象时确定读取内存单元的长度,比如char型变量占1个字节,int型变量占4个字节,类对象和结构体对象占的长度更加多样化,当定义了一个char型指针p,执行*p时程序只读取一个字节的内容,如果p是int型则*p读取4个连续的字节的内容。还有指针相加减,指针自增自减运算,都可以通过这个来确定一次移动的长度。
另一方面,也防止乱指发生意外吧,C语言中printf和scanf的格式控制串就要用的时候亲自设定,如果设不对运行时就可能出错。
我们编译出来的程序运行时是和操作系统打交道的,程序中用到的内存都向操作系统 其实我们完全留意到,向磁盘写东西的时候很慢,但把写进了的东西删掉的时候却快
要看系统是用什么来存这些信息的,如果用是数据库,那就是用sql语句删除.如果只是简单的文件读写,那是先把学生全部信息读进来,可能放到一个vector list map这些容器中,然后进去删除,再然再把它们写回文件去.
#include "stdio.h"#define maxlen 100 typedef struct{ //定义结构体 int data[100]; int last+1)) //判读删除的位置是否合法 { printf("参数出错!"); } else{ //删除的位
head是头指针,p1是指向第一个结点的指针,p2是指向p1 首先对单向链表的删除要考虑以下4种情况:1.链表本身是空的2.删除的是链表的首结
delete是和new一起使用的,如果要使用delete的话意味意着你前面创建链表的时候有使用new创建每一个节点.如果前面没有new的话后面就不能使用delete.
存储在硬盘中的每个文件都可分为两部分:文件头和存储数据的数据区.文件头用来 都没有将数据从数据区直接删除. 由文件删除的原理可知,要彻底删除数据,只有把
程序自删除的方式有很多,不过最终的思想不过是关闭本身进程,开启新进程用于删除自身.下面这个方法是用windows自带命令行程序实现删除.命令行为 cmd.exe /c
不用链表就用数组a[],记录条数为n假设删除a[i],就把从i+1向后到n的所有记录向前移一位修改直接改就是了
Person * del(Person * head,int a){//查找并删除结点 Person *p,*temp; p=head; while(p!=NULL||(p-next)!=NULL){ //这个判断条件可能为真吗?两边需要都为假,即p ==
用remove函数功 能: 删除一个文件 用 法: int remove( const char *filename);头文件:在Visual C++ 6.0中可以用stdio.h返回值:如果删除成功,remove返回0,否则返回EOF(-1).
楼主的意思是在str1中删除str2中出现的字符?那么改成:
#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]);
}
}