1.sprintf,strcpy,strncpy
做作业的时候发现对这三个函数的理解有点混乱,整理一下三个复制字符串函数的区别
1.
sprintf(s1,”%s”,s2)————将s2字符串输入到s1,包括’\0’,同理如果没有遇到”\0″,会一直复制到下一个字符串,这一点类似于strcpy
2.
strcpy(s1,s2)——————-将s2复制到s1,包括’\0’。
这两种复制都存在一种问题就是如果s2字符串没有以’\0’结尾就会错误的一直往下复制
3.
strncpy(s1,s2,n)————–复制s2的前s个字符,
这里我发现存在一种可能会导致错误的用法,strncpy(s1,s2,strlen(s2)),strlen并没有将’\0’计算进去,因此这个复制不会复制’\0’,因此假设
s1=”abc”,s2=”12″,strncpy(s1,s2,strlen(s2))————s1=”12c”—-s1保留原来的字符
总结的来说strcpy会复制到\0,strncpy会忠心耿耿的复制完n个字符,空的补\0,sprintf多用在格式化输入。
2.char *,char []
char * s1="abc"; char s2[4]="abc"; char *s3=malloc(sizeof(char)*4);
s1创建在常量区无法修改,s2创建在在栈区为一个字符数组,s3创建在堆区
3.操作文件时不要使用str
我们str系列的操作都是以\0作为结尾,然而当我们在操作文件传输信息时,这些信息有一些是含有\0的但这并意味着他的结束,特别是二进制文件。