#include<stdio.h> #define MAX 81 int main() { char name[MAX]; char * ptr; printf("hi,what is your name?\n"); ptr=fgets(name,MAX,stdin); printf("%s?Ah !%s! \n",name,ptr); return 0; } /*由于fgets把换行符存储到字符串里,这样每次显示字符串时 * 就会显示换行符 * 运行结果: * hi,what is your name? tony tony ?Ah !tony ! */
scanf()可以支持出入字符串,也可以限制输入的长度如scanf("%5s %10s",name1,name2)
puts()函数只需要给出字符串参数的地址,它显示字符串时自动在其后添加一个换行符,要确定输出的是字符串
fputs和fgets()对应,不过需要第二个参数来说明要写的文件,可以用stout来作为参数来进行输出显示,fgets()存储输入中的换行符,而fputs()也不为输出添加换行符
strlen()函数是求字符串的长度的,strcat()函数是连接两个字符串的,将后一和字符串连接到前一个字符串上,返回值为第一个参数的值
功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。
strncat原型:extern char *strncat(char *dest,char *src,int n)多的一个功能就是可以复制指定个数的字符
strcpy()函数实现代码:
extern char *strcpy(char *dest,const char *src);
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,其实也就是相当于赋值,类似于a=b,它是字符串的赋值;
但是如果实参只是一个字符串指针而且未初始化,就会出现错误,因为分配的大小不一样,也就会导致错误
#include <stdio.h> #include <stdlib.h> char* strcpy(char *s1,const char *s2)//不变的东西一定要加上const { int i=0;//char *p=s1,这样就可以了 while(s2[i]!='\0')//*s2!='\0' { s1[i]=s2[i];//*s1++=*s2++;不能这样做,指针是一直在往后走,因此不能够实现复制成功,而 i++; } s1[i]='\0'; //*s1='\0' //s1=p;//这个就保证指针同步了,因为指针走到前面,需要回头才能指向原来的地址 return s1; } int main(void) { char a[]="hello!"; char b[10]; puts(strcpy(b,a)); printf("%s",strcpy(b,a)); //puts(b); return 0; }
函数原型:int strncmp(char *str1, char *str2, int maxlen);
此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则返回(str1[n]-str2[n])。
char *strchr(const char *s ,int c);该函数返回一个指向字符串s中存放c的第一个指针的位置
如果不存在就返回null
char *strrchr(const char *s,char c),该函数返回一个指针就是字符c最后一次出现的地方,如果每日有,就返回空指针
char *strpbrk(const char *s1,const char *s2),该函数返回s1中存放s2字符串的任何字符的第一个位置,如果没有,
则返回空指针