几种字符串常用的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;
}