【维生素C语言】第八章 - 实用调试技巧(四)

简介: 一名优秀的程序员是一名出色的侦探,每一次调试都是尝试破案的过程……本章将详细带你学习实用调试技巧!正式开启DEBUG

六、模拟实现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 编译型错误

📚 直接看错误提示信息(双击),解决问题;


或者凭借经验就可以搞定,相对来说简单;

be550b9f830c9a0187d35e2248e9bdf8_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDUwMjg2Mg==,size_16,color_FFFFFF,t_70.png


0x01 链接型错误

📚 看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。


一般是 标识符名不存在 或者 拼写错误 ;

f3310d30d5fcfe720291c18ff220a3b6_20210609142645877.png


0x02 运行时错误

📚 代码明明跑起来了,但是结果是错的;


🔑 借助调试,逐步定位问题,利用本章说的实用调试技巧解决;


0x03 建议

📜 做一个有心人,每一次遇到错误都进行自我总结,积累错误经验!

相关文章
|
4月前
|
存储 编译器 C语言
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存2
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存
|
4月前
|
程序员 C语言 C++
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存1
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存
|
1月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。
|
4月前
|
C语言
C语言使用宏定义实现等级调试输出PRINT_LEVEL
C语言使用宏定义实现等级调试输出PRINT_LEVEL
|
3月前
|
安全 编译器 程序员
【C语言】:VS实用调试技巧和举例详解
【C语言】:VS实用调试技巧和举例详解
28 1
|
3月前
|
存储 编译器 C语言
C语言学习记录——调试技巧(VS2019环境下)
C语言学习记录——调试技巧(VS2019环境下)
42 2
|
3月前
|
程序员 编译器 C语言
C语言中的assert.h:调试助手与断言详解
C语言中的assert.h:调试助手与断言详解
|
4月前
|
程序员 C语言 C++
C语言实用的调试技巧
C语言实用的调试技巧
33 3
|
4月前
|
程序员 编译器 测试技术
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
37 1
|
4月前
|
NoSQL 编译器 C语言
【C 言专栏】C 语言中的调试技巧与工具
【5月更文挑战第6天】在C语言编程中,调试是必不可少的技能,涉及基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查和性能分析。通过分析问题、设置断点、逐步调试和检查逻辑来解决错误。调试时需保持耐心,合理选用工具,记录过程,并避免过度调试。熟练掌握这些技能将提升代码质量和开发效率。
82 0
【C 言专栏】C 语言中的调试技巧与工具