C语言常用字符串

目录

1.什么是字符串

2.如何定义字符串 

第3和第4定义的区别:3是字符串变量,4是字符串常量,不予许被修改

3.strlen和sizeof的区别 

 4.地址分配(malloc,realloc,free,memset)

案例 

 5.字符串拷贝(strcpy,strncpy) 

5.1strcpy()

 5.2strncpy()

 6.字符串拼接(strcat)

7.字符串比较 (strcmp)


1.什么是字符串

由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串,例如 “hello world”

注意:字符串结束的标志是一个 \0
在计算字符串长度的时候\0是结束标志,不算作字符串内容。

2.如何定义字符串 

1.int arr[]={1,2,3,4};  //整型数组

2.char arr1[]={'h','e','l','l','o','\0'};
//定义字符串其实和定义整型数组很像,但是要以\0结尾

3.char arr2[]={"hello world"};    //喜欢用这种和*p="hello world"这种

4.char *p="hello world";

第3和第4定义的区别:3是字符串变量,4是字符串常量,不予许被修改

3.strlen和sizeof的区别 

在计算数据长度一般都用 sizeof 或者 strlen  ,不过这两还是有不小的区别的 
1例
#include <stdio.h>
#include <string.h>
int main(){
	char arr[128]={"hello"};
	printf("sizeof :%d",sizeof(arr)); 这里的 sizeof 就是128了 sizeof 计算的整个数组的长度
	printf("strlen :%d",strlen(arr)); 这里的 strlen 就是5 strlen 计算的是有效的长度了,注意就好
 	试完数组了就试下指针
	char *p="hello";
	printf("sizeof:char *   %d",sizeof(char *));
	printf("sizeof:int *    %d",sizeof(int *));
	printf("sizeof:p        %d",sizeof(p));
	printf("strlen:p        %d",strlen(p));
	1通过代码可以知道,指针在这是占八位字节,且要用strlen才能算出指针中内容的大小
	
}

代码运行结果

 4.地址分配(malloc,realloc,free,memset)

malloc()函数原型  void *malloc(size_t size)

C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。

malloc在堆开辟空间,而普通变量在开辟空间,函数调用结束后就清理,回收空间,而堆要程序结束后才会释放空间,所以malloc和free一般成对出现,主动释放

realloc()函数原型 void *realloc(void *ptr, size_t size)

C 库函数 void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。 

free()函数原型    void free(void *ptr)

 释放,防止内存泄露,防止悬挂指针

memset()函数原型  void *memset(void *str, int c, size_t n)

memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值

memset函数在初始化处理时非常方便,但也有其局限性,比如要注意初始化数值,要注意字节数等等

int a[4];
memset(a,1,sizeof(a));

案例 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
	char *p;
	p=(char *)malloc(1);
	*p='s';
	printf("*p=%c\n",*p);
	free(p);
	//malloc在执行完后前一个malloc会悬挂起来,找不到了
	//malloc在堆开辟空间,而普通变量在栈开辟空间,函数调用结束后就清理,回收空间,而堆要程序结束后才会释放空间
	p=(char *)malloc(12);
	memset(p,'\0',12);//将p全部清为\0
	int len=strlen("chenxinyu666");
	int Newlen=len-12+1;  //将要扩容的大小
	realloc(p,Newlen);    //将p进行扩容
	strcpy(p,"chenxinyu666");
	puts(p);
	puts("done");
	return 0;
}

 5.字符串拷贝(strcpy,strncpy) 

5.1strcpy()

函数原型:char *strcpy(char* dest, const char *src);

 参数1要被赋值的指针,参数2要给别人赋值的指针,并返回被复制后的后的dest

 5.2strncpy()

函数原型:char *strncpy(char *dest, const char *src, int n)

表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest

 6.字符串拼接(strcat)

 函数strcat()原型:char *strcat(char *dest, const char *src);

把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。

7.字符串比较 (strcmp)

函数strcmp()原型:int strcmp(const char *s1,const char *s2);

若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数

函数strncmp()原型:int strncmp ( const char * str1, const char * str2, size_t n )

 功能是把 str1 和 str2 进行比较,最多比较前 n 个字节,若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。

8 如何快速查找需要的标准库函数呢?

我的习惯是使用man函数手册

格式:man strcpy 

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@ChenPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值