一、输出字符串:puts()自动换行
输出方式:①puts("请输入一个字符串\n");
②puts(p);
③printf("%s\n",p);
p是地址变量
#include <stdio.h>
int main()
{
char *p = "hello";
puts("请输入一个字符串\n");
puts(p);
printf("%s\n",p);
return 0;
}
二、获取字符串
①scanf("%s",p)
②gets:函数原型:char *gets(char *str);
gets(str);
puts(str);
三、自己实现字符串拷贝函数
1.strcpy
①备份被拷贝目标地址,进行数据赋值
#include <stdio.h>
char* myStrcpy(char *des,char *src){
if(des ==NULL || src ==NULL){ //判断指针是否是空指针
return NULL;
}
char *bak = des; //备份目标地址des
while(*src !='\0'){
*des = *src;
des++; //拷贝地址偏移
src++;
}
*des = '\0'; //给字符串赋予结束标志
return bak; //不是des,因为des已经偏移了不是首地址
}
int main()
{
char str[128]={'\0'};
char *p = "hello,world";
myStrcpy(str,p);
puts(str);
return 0;
}
②简化指针赋值与偏移
char* myStrcpy2(char *des,char *src){
if(des ==NULL || src ==NULL){
return NULL;
}
char *bak = des; //备份目标地址des
while(*src !='\0'){
*des++ = *src++; //des先拷贝给src,再同时都偏移
}
*des = '\0'; //给字符串赋予结束标志
return bak; //不是des,因为des已经偏移了不是首地址
}
*des ++= *src++的过程是先*des=*src这个赋值过程,再进行des++和src++完成指针的偏移
③ 赋值的同时进行判断
char* myStrcpy3(char *des,char *src){
if(des ==NULL || src ==NULL){
return NULL;
}
char *bak = des; //备份目标地址des
while((*des++ = *src++) !='\0'){
//des先拷贝给src,再同时都偏移
}
*des = '\0'; //给字符串赋予结束标志
return bak; //不是des,因为des已经偏移了不是首地址
}
(*des++ = *src++) !='\0'中,(*des++ = *src++)用的是一个“=”,表示赋值,但赋值归赋值,后面还是可以结判断语句的,这边是进行间接的赋值。
2.strncpy
拷贝相应数量字符
char* myStrncpy(char *des,char *src,int count){
if(des ==NULL || src ==NULL){
return NULL;
}
char *bak = des; //备份目标地址des
while(*src !='\0' && count>0){
*des++ = *src++;
count--;
}
if(count > 0 ){ //判断是否有剩余数组数据没填充
while(count>0){
count--;
*des++ = '\0';
}
return des; //以防后面多赋予结束标志
}
*des = '\0'; //给字符串赋予结束标志
return bak; //不是des,因为des已经偏移了不是首地址
}