六、模拟实现strlen函数
0x00 计数器实现
#include #include int my_strlen(const char* str) { assert(str); int count = 0; while (*str) { count++; str++; } return count; } int main() { char arr[] = "abcdef"; int len = my_strlen(arr); printf("%d\n", len); return 0; }
0x01 指针减指针实现
#include #include size_t my_strlen(const char* str) { assert(str); const char* eos = str; while (*eos++); return(eos - str - 1); } int main() { char arr[] = "abcdef"; printf("%d\n", my_strlen(arr)); return 0; }
0x02 库函数写法
/*** *strlen.c - contains strlen() routine * * Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: * strlen returns the length of a null-terminated string, * not including the null byte itself. * *******************************************************************************/ #include #include #pragma function(strlen) /*** *strlen - return the length of a null-terminated string * *Purpose: * Finds the length in bytes of the given string, not including * the final null character. * *Entry: * const char * str - string whose length is to be computed * *Exit: * length of the string "str", exclusive of the final null byte * *Exceptions: * *******************************************************************************/ size_t __cdecl strlen ( const char * str ) { const char *eos = str; while( *eos++ ) ; return( eos - str - 1 ); } size_t :无符号整型(unsigned int) __cdecl :函数调用约定
七、编程常见的错误
0x00 编译型错误
📚 直接看错误提示信息(双击),解决问题;
或者凭借经验就可以搞定,相对来说简单;
0x01 链接型错误
📚 看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。
一般是 标识符名不存在 或者 拼写错误 ;
0x02 运行时错误
📚 代码明明跑起来了,但是结果是错的;
🔑 借助调试,逐步定位问题,利用本章说的实用调试技巧解决;
0x03 建议
📜 做一个有心人,每一次遇到错误都进行自我总结,积累错误经验!