0926字符串指针

发布于:2022-12-06 ⋅ 阅读:(335) ⋅ 点赞:(0)

char *pchar = "hello"

这是一个字符串常量,不允许被修改

char cdata[ ]="hello"

这是一个字符串变量,可以被修改

对于一个普通的字符串常量,可以定义一个指针,来指向它,指向字符串常量的地址空间,但是如果不是指向一个具体的空间,对内存操作就会出问题,

所谓的野指针,是指并没有明确的内存指向,很危险,可能会影响到其他程序的内存空间

char *p;

* p = 'a';

*p并没有明确的内存指向,却进行赋值,此时程序就会出现断错误

strlen函数会计算有效字符的长度

不同于sizeof,sizeof在计算字符串时会把\n的长度也算进去

又例如

char *p = "hello";

printf("%d",sizeof(p));

这里得到的p的值为8,这里p是一个char *,使用sizeof计算的时候,得出的是计算机用多少字节来表示一个地址,这里和char 以及int没有关系,认定的是一个地址,就是用8个字节来表示

而strlen(p)得到的值是5

函数strcpy(拷贝到哪里去,从哪里拷贝)

free()函数,释放malloc所调用的内存空间,malloc所申请的内存空间是在堆上,一般的函数是在栈上,栈上会及时清零,而堆上所分配的内存空间只有在程序结束时才会被释放,所以会出现内存泄露的情况,所以要使用free()函数,来及时的释放内存

free()函数不仅用来防止内存泄漏,也用来防止悬挂指针

悬挂指针其实也是野指针的一种

使用方法free(一个指针)

如        char* p;

free(p);

一般在free(p);后面加一句p = NULL;放置p称为野指针;

有时使用malloc函数分配的内存空间会不够用,所以使用realloc,它是c库函数尝试重新调整malloc或者calloc所分配的指针所指向的内存块的大小

realloc的用法

realloc(原本扩容的指针(地址),后面是要继续增大多少)

realloc(p,newLen);newLen是基于原本的大小进行扩容。

char *p;

p=(char *)malloc(12);

printf("扩容前的地址%x",p);

int len = strlen("awdawdawdawda");

int newLen = len -12 +1;

realloc(p,newLen);

printf("扩容后的地址“%x",p);

strcpy(p,"awdawdawdawda");

puts("end");

memset()函数,函数原型

void *memset(void *str,int c,size_t n )
                        (新开辟的内存,要初始化的内容,大小)

比如清理内容:

char *p;

p = (char *)malloc(12); 

memset(p,'\0',12);

将内存全部清理为0;