工程踩坑指南(6.12更新)

为了防止重复踩坑,现在将踩的坑分点记录下来

1、在传递值时错误将某一指针变量的地址传递到另一指针变量,导致参数同步变化

strdup()函数

在进行值的传递时要注意传递的是指针还是值。谨记,在不需要对传入的参数进行操作,例如仅仅只是打印或者读取值时采用将参数拷贝下来的形式,拷贝函数可以使用

char *strdup(const char *str);
const char *original_str = "Hello, world!";
char *duplicate_str;

// 使用 strdup 复制字符串
duplicate_str = strdup(original_str);

strcpy(函数

strcpy() 函数用于将一个字符串复制到另一个字符串中,包括字符串结束符 \0。它的原型如下:

char *strcpy(char *dest, const char *src);

其中,dest 是目标字符串的地址,src 是源字符串的地址。

该函数返回一个指向目标字符串的指针(即 dest 的值),这个指针指向复制后的目标字符串的起始位置。

使用 strcpy() 函数时需要注意以下几点:

  1. 目标字符串 dest 必须有足够的空间来存储源字符串 src,否则可能会导致缓冲区溢出。
  2. 源字符串 src 的内容将被完全复制到目标字符串 dest,包括结束符 \0
  3. 如果目标字符串 dest 中已经包含有数据,strcpy() 函数

strdup()strcpy() 的区别

  1. 返回类型:

    • strcpy() 的返回类型是 char *,它返回目标字符串的指针,即指向复制后的目标字符串的起始位置。
    • strdup() 的返回类型也是 char *,但它返回的是一个指向新分配的内存空间的指针,该内存空间包含了复制后的字符串内容。
  2. 内存分配:

    • strcpy() 函数并不负责内存的分配,它要求调用者提供足够的目标字符串空间来存储复制后的内容。如果目标字符串空间不足,可能会导致缓冲区溢出。
    • strdup() 函数会自动分配足够大小的内存空间来存储复制后的字符串内容,并返回指向该内存空间的指针。因此,它更安全,不容易导致缓冲区溢出,但需要手动释放内存以避免内存泄漏。
  3. 使用方式:

    • strcpy() 需要手动指定目标字符串的地址,并将源字符串复制到目标字符串中。
    • strdup() 则只需要提供源字符串的地址,它会自动为复制后的字符串分配内存并返回指针。
  4. 可用性:

    • strcpy() 是标准 C 库函数,几乎在所有的 C 编译器中都可以使用。
    • strdup() 不是标准 C 函数,而是一些系统提供的扩展函数。因此,它并不是所有编译器和系统都支持的。

综上所述,strcpy() 适用于在已分配好的目标字符串空间中进行字符串复制操作,而 strdup() 更适用于需要动态分配内存来存储复制后的字符串的情况。

PS:

char *Company_name = "BAIDU";
char Company_name[] = "BAIDU";

让我们来看看它们的区别:

  1. char *Company_name = "GOVEE"; 这种方式定义了一个指针,该指针指向一个存储在只读内存中的字符串常量 "GOVEE"。这个字符串是不可修改的,任何试图修改它的操作都会导致运行时错误。这种方式定义的字符串是静态的,它们的长度是固定的,不能修改。

  2. char Company_name[] = "GOVEE"; 这种方式定义了一个字符数组,并用字符串常量 "GOVEE" 来初始化它。这样的定义会在栈上分配内存空间,并将 "GOVEE" 的内容复制到数组中。这意味着你可以修改数组中的内容,因为它们被存储在可写内存中。

我们使用strcpy是是复制并且覆盖前一个,所以此时在使用指针变量的形式定义时,会报段错误

2、在进行烧录时如果突然出现烧录不进去

        可以将USB口与对应杜邦线进行拔插,确认已准确插入。

这里也需要注意串口是否连接到虚拟机上,导致主机无法识别。

注意烧录的波特率,芯片的flash是否合理,端口是否准确。

3、在使用串口发送数据时,注意双方波特率是否统一

4、不要盲目相信串口打印的数据,逻辑分析仪才是真神

5、使用逻辑分析仪抓取数据时,如果抓不出来,确认一下是否共地

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值