C语言0927

几种字符串常用的API

输出字符串:puts()自带换行                printf();

获取字符串:scanf()

                       char* gets(char *str)这里的str对应的就是p

strcpy

是将strSrc中的数据拷贝到以strDest开头的地址里面。
内存不能重叠。

strncpy

strcnpy多了一个尾巴,做一个长度的判断
strncpy()原型:char *strncpy(char *dst,const char *src,size_t len)

功能:从以src为首地址的字符串中之多复制len个字符到以dst为首地址的字符串。如果在[0,len]之间没有’\0’结束符,则dst中没有结束符。如果len大于src的长度,则dst中多余位置自动置为null
 如果len小于src的长度,则dst中没有结束符,dst输出时会出现乱码,直至碰到’\0’结束符为止
————————————————
 

常量指针不能改变值,指针常量不能改变地址

常量指针,其本质是指针,指针就是地址,地址可以修改,但是地址存的值无法修改。

指针常量,其本质是常量,指向常量的地址无法修改,但是可以修改的是其常量的值。

assert(断言)

其实就是该函数的值不能为零

#include "assret.h"

void assert (int expression);

assert 的作用是现计算表达式expression,如果其值为假(即为0),那么他先向stderr打印一条出错信息,然后通过abort来终止程序的运行

在调试结束后,可以通过在包含#include的语句之前插入#define NDEBUG来禁止assert调用

和if else类似,assert频繁的使用会极大的影响程序的性能,增加额外的开销。

拼接

char *strcat(char *dest,char *src);

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

#include  <stdio.h>
#include <string.h>
#include <assert.h>//断言

//封装拼接函数
char *myStrcpy(char *des,char *src)
{
	assert((*des!=NULL) && (*src!=NULL));//在此处进行断言,通过断言完善程序,
	char *dek = des; 
	while(*des!='\0'){
		des++;
	}
	while((*des++=*src++) != '\0');
	
	*des = '\0';//上面先自加,之后再最后赋值,
	
	return dek;//a最后返回之前预先保存的值;
}

int main()
{
	char *p = "qwe";
	char str[128]={"zxc"};
	char *p2;
	
	p2 = strcat(str,p);
	
	puts(str);
	
	puts(p2);
	
	return 0;
}
#include <stdio.h>

char* myStrcpy(char *des,char *src) //des是目标值,src是待存值
{
	if (des == NULL || src == NULL) 
	{
		return NULL;
	}
	char* bak = des;//暂时存储

	while (*src != '\0')
	{
		*des = *src;//此处赋值的是值
		des++;//赋值之后地址自增,循环
		src++;
	/*
		或者 	*des++ = *src++; 	来代替上面三行的值,先拿出来赋值,然后再偏移
	*/
	
	/*
		或者whlie((*des++ = *src++)!='\0');
		这个语句不只又0和1的值,还有判断
		
	*/
	des = '\0';
	
	return bak;//因为des向后偏移了,bak用来存放最初des的值
}

char *mystrncopy(char *des,char *src,int count)
{
	if(des == NULL || src == NULL)
	{
		return NULL;
		
	}
	char *bak = des;
	while(*src !='\0' && count >0)
	{
		*des++ = *src++;
		count--;
	}
	if(count > 0)
	{
		while(count > 0)
		{
			count--;
			*des++ ='\0';
		}
		return des;
	}
	des = '\0';
	
	return bak;
	
}

int main() 
{
	char str[128] = {'\0'};
	
	char* p = "qwe";
	myStrcpy (str,p);//赋值p的值到str
	puts(str);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值