当我运行下面的代码时,我得到一个错误.

void printData(int total_trees,int burned){
  printf("Before printing data\n");
  float percentBurned = (float)burned / (total_trees+burned)*100;
  
  printf("total burned: %d (%.1f\%)\n",burned,percentBurned);
  printf("trees left: %d\n", total_trees);
  // printf("trees left: %d\n", total_trees);
  printf("After printing data");
}

错误显示为*** stack smashing detected ***: terminated

在输出错误之前,它输出前三个printf语句.

Link to image because this is my first stackoverflow post

我试着把所有东西都重新安排了很多次,但到目前为止都没有奏效.我猜print tf语句本身不会触发溢出,但我可能错了.

感谢您能给予我的任何帮助:)

编辑:printf("trees left: %d\n", total_trees);是抛出错误前运行的最后一行

推荐答案

对格式字符串中的%字符进行转义的正确方法是%%,而不是\%.如果您启用警告(例如gcc -Wall),一个像样的编译器应该警告您这一点,您应该始终这样做.

解决了这个问题后,我的程序运行正常,我try 了(try on godbolt)次,所有的警告和消毒剂都是正确的.如果它仍然对您无效,那么您需要发布一个minimal reproducible example,因为错误可能存在于代码的其他部分.

C++相关问答推荐

使用sd-设备列举设备导致seg错误

在Windows上构建无聊的SSL x64

从C函数调用asm函数时生成错误的BLX指令(STM32H753上的gcc)

如何解决C中的严格别名?

当多个线程在C中写入相同的文件描述符时,如何防止争用情况?

Can函数指针指向C++中具有不同参数连续性的函数

如何在C中通过套接字自定义数据类型读取原始变量?

Clang警告称,`ffi_type`与`sizeof`不兼容

在C++中访问双指针

仅从限制指针参数声明推断非混叠

运行时错误:在索引数组时加载类型为';char';`的空指针

不带Malloc的链表

挥发性语义的形式化理解

`%%的sscanf无法按预期工作

C语言中的指针和多维数组

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

GDB 跳过动态加载器代码

UEFI 应用程序中的计时器回调仅在 AMI BIOS 中挂起

为什么 C 字符串并不总是等同于字符数组?

为什么使用 C 引用这个 char 数组会导致 Stack smasing?