网站开发摊销多少年,txt电子书下载网站推荐,网站开发需求图,手机网站建设推广软文strncmp strncat strncpy长度受限制的字符串函数
首先 我们需要知道 这几个的语法格式差不多
这里传递的size_t的长度是传递的字节长度 不是个数 也就这里int*是四个字节 char*是一个字节 如果是整数进行交换 。此时也就需要20个字节#xff0c;这样可以交换五个整数 这里差…strncmp strncat strncpy长度受限制的字符串函数
首先 我们需要知道 这几个的语法格式差不多
这里传递的size_t的长度是传递的字节长度 不是个数 也就这里int*是四个字节 char*是一个字节 如果是整数进行交换 。此时也就需要20个字节这样可以交换五个整数 这里差异只是多一个参数 也就是size_t sz长度参数 strncpy拷贝
这里只是多一个字节长度
这里拷贝三个 这里是让拷贝几个就拷贝几个 没有’\0‘ 这里拷贝8个 这里是不足八个 加上\0 strncpy代码的模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includeassert.h
#includestring.h
void my_strncpy(char* str1, char* str2, size_t sz)
{assert(str1 str2);while (sz 0)//这里是字节交换 每次sz会进行减少一个字节{*str1 *str2;//这里进行复制str1; //各自向后移动str2;sz--;//字节每次减少1 }
}
int main()
{char arr1[] dfhguil;char arr2[100] { 0 };my_strncpy(arr2, arr1, 3);printf(%s, arr2);return 0;
} strncat拼接
举例1
这里是追加三个字节 举例2
这里是追加3个 从前往后走进行追加 把该追加的追加之后 会放一个字符串 举例3
把该追加的追加之后 加上字符串0 之后就不继续添加了 strncat的模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includeassert.h
#includestring.h
void my_strncat(char* str1, char* str2, size_t sz)
{assert(str1 str2);//这里使用一个断言 也就是只要不是空指针 就可以继续运行while (*str1 ! \0)//这里是先找到第一个数组的\0然后跳出循环str1;while (sz ! 0)//其次和之前的循环方式一样 每次减少一个字节 把数值赋给arr1 但是这里需要知道 这里是常量字符串 所以需要arr1 的空间大于arr2{*str1 *str2;str1;str2;sz--;}*str1 \0;//最后是把\0放到字符串的结尾
}
int main()
{char arr1[100] hello ;char arr2[] bitttt;my_strncat(arr1, arr2, 3);printf(%s, arr1);return 0;
} strncmp比较
这里是比较前两个字节
在给定 的长度范围内进行比较 这里你让我拷贝 我就进行拷贝 存在越界访问的情况
这里拷贝出来 但是程序崩溃了 strncmp的模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includeassert.h
#includestring.h
char* my_strcmp(char* str1, char* str2, size_t sz)
{assert(str1 str2);while (*str1 *str2)//这里代码循环的条件就是只要相等就继续 然后遇见最后一个字符\0自然会跳出循环{if (sz 0)//这里每次循环的时候会进行sz的-- 也就是对照字符的-- 如果不满足相等的条件 此时也就会跳出循环{return 0;}str1; str2;sz--;}return *str1 - *str2;//while (*str1 *str2 sz 0)//{// str1; // str2;// sz--;//}//return sz 0 ? 0:(*str1 - *str2);//这里是使用一个三目操作符 如果满足sz循环 也就是返回0 不然就是返回差值 这样也是允许的}int main()
{char arr1[100] hello ;char arr2[] bitttt;int ret my_strcmp(arr1, arr2, 3);printf(%d, ret);return 0;
} 代码使用的总结
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includeassert.h
#includestring.h
int main()
{//拼接限制函数的使用 这里拼接三个char arr1[100] slaidg ;char arr2[] dfilsug ;strncat(arr1, arr2, 3);printf(%s\n\n, arr1);//拷贝限制函数的使用 这里拷贝五个char arr3[] slaidg ;char arr4[100] { 0 };strncat(arr4, arr3, 5);printf(%s\n\n, arr4);//比较函数的使用char arr5[] slaidg ;char arr6[] dfilsug ;char arr7[] slaidg ;int ret1 strcmp(arr5, arr6, 3);//不相同 1 前三位比较的时候上面的大 arr5大int ret2 strcmp(arr5, arr7, 3);//相同 0 前三位一样大printf(%d\n%d\n, ret1, ret2);
} ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————