作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个简单的函数,用于创建一个“cd/dvd”,它接受 3 个参数:名称、评级和表示 cd/dvd 是否被翻录的“ bool 值”。
#include <stdio.h>
int makecd(char *Name, int Rating, int Ripped)
{
if((Rating > 5) || (Rating < 0))
{
printf("Rating is wrong!\n");
return 1;
}
if(Ripped = 0)
{
printf("Name: %s, Rating: %s/5, Ripped: false\n", Name, Rating);
return(0);
}
else if(Ripped = 1)
{
printf("Name: %s, Rating: %s/5, Ripped: true\n", Name, Rating);
return(0);
}
else
{
printf("Value of \"Ripped\" not set correctly!\n");
return(1);
}
}
int main(int argc, char *argv[], char *envp[])
{
makecd("Avatar", 4, 1);
/* std::cin.get(); */
char Ignore[65536] = {'\0'};
gets(Ignore);
return 0;
}
使用 dbx 进行一些调试后,我发现核心转储位于第 18 行(就在“if(Ripped = 1) { ... }”之后)。让我困惑的是,为什么我会得到核心转储。
dbx的输出如下:
signal SEGV (no mapping at the fault address) in strlen at 0xfee8645c
0xfee8645c: strlen+0x000c: movl (%eax),%edx
Current function is makecd
18 printf("Name: %s, Rating: %s/5, Ripped: false\n", Name, Rating);
最佳答案
您对 printf
使用了错误的格式说明符:
printf("Name: %s, Rating: %s/5, Ripped: false\n", Name, Rating);
%s
说明符需要包含以 null 结尾的字符串的字符数组的地址。第一个很好,但第二个是从参数列表中获取一个 int
。使用错误的格式说明符会调用 undefined behavior ,在本例中表现为崩溃。
如果要打印整数,请使用 %d
格式说明符:
printf("Name: %s, Rating: %d/5, Ripped: false\n", Name, Rating);
此外,这是不正确的:
if(Ripped = 0)
这不是通过赋值进行比较。要进行比较,请使用 ==
运算符:
if(Ripped == 0)
关于C:位于 "printf"的神秘核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45378965/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!