memset
void *memset(void *str, int c, size_t n)
memset作用是吧n个c字符复制到字符串str的前n个位置:
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char des[]="this is a string..";
memset(des,'2',6);
puts(des);
return 0;
}
输出:
222222s a string..
memcpy
void *memcpy(void *str1, const void *str2, size_t n)
memcpy作用是:从存储区 str2 复制 n 个字符到存储区 str1
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char src[40];
char dest[100];
memset(dest,'\0',sizeof(dest));
strcpy(src,"this is ----");
strcpy(dest,src);
printf("%s\n",dest);
return 0;
}
输出:
this is ----
编写my_memcpy:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
void my_strcpy(char *des,const char *str){
puts("my_strcpy");
if(str==NULL){
des=NULL;
return;
}
assert(des!=NULL);
memset(des,'\0',strlen(des)+1);
for (int i = 0; i <strlen(str); ++i)
{
des[i]=str[i];
}
puts(des);
}
int main(int argc, char const *argv[])
{
char src[40];
char dest[100];
memset(dest,'\0',sizeof(dest));
my_strcpy(src,"this is ----");
my_strcpy(dest,src);
printf("%s\n",dest);
return 0;
}
C assert()异常处理:
转自:https://www.cnblogs.com/vimsk/archive/2010/12/11/1901698.html
assert()是一个调试程序时经常使用的宏,切记,它不是一个函数,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。