/**/部分为自己的想法
puts和gets:
void myputs(char *str)
{
//字符串结尾是'\0'
while(*str != '\0'){
putchar(*str);
str++;
}
putchar('\n');
}
int mygets(char *str)
{
int cnt = 0;
if(str == NULL){
puts("内存非法访问!");
return;
}
while(*str = getchar()){
if(*str != '\n'){ //gets()结束是'\n'
str++;
cnt++;
}else{
return cnt; //计算输入字节数
}
}
/*
while(*(str-1) != '\n'){
*str = getchar();
str++;
}
return;
*/
}
strlen:
int mystrlen(char *str)
{
int cnt = 0;
while(*str != '\0'){ //字符串结尾是'\0'
cnt++;
str++;
}
return cnt; //计算字节数
}
memset:
void mymemset(char *str , char c , int size)
{
while(size){
*str = c;
size--;
str++;
}
/*int i;
for(i=0 ; i<size ; i++){
*str = c;
str++;
}
*/
}
strcpy:
char *mystrcpy(char *dest,char *src)
{
if(dest == NULL || src == NULL){
return NULL;
}
//字符串结尾是'\0'
while(*src != '\0'){
*dest = *src;
dest++;
src++;
}
*dest = '\0'; //防止结尾乱码
return dest;
}
strncpy:
char *mystrncpy(char *dest,char *src,int size)
{
if(dest == NULL || src == NULL){
return NULL;
}
//字符串结尾是'\0'
while(*src != '\0' && size>0){
*dest = *src;
dest++;
src++;
size--;
}
*dest = '\0'; //防止结尾乱码
return dest;
}
strcat:
char *mystrcat(char *dest,char *src)
{
while(*dest != '\0'){
dest++;
}
while(*src != '\0'){
*dest++ = *src++;
}
*dest = '\0'; //防止尾部乱码
/*
int i = 0;
while(*dest != '\0' || *src != '\0'){
for(i =0 ; i<strlen(dest) ; i++){
dest++;
}
for(i=0 ; i<strlen(src) ; i++){
*dest++ = *src++;
}
}*/
return dest;
}
一些笔记:
char *p;//野指针
char *p = NULL;
野指针与NULL都不可以对输入字符串进行操作!
野指针:不知道指向哪里
NULL:谁都不指
可以用`
char *p;
p = (char *)malloc(128);
if(p == NULL ){
printf("申请内存失败\n");
exit(-1);
}
memset(p,'\0',128);
相当于char p[128] = {'\0'};
当需要再次使用strcpy时,最好先进行充值(memset)。
strcat函数:dest的空间一定要足够容纳追加的字符串。