以下代码与EXC_BAD_ACCESS崩溃。任何人都有任何线索,为什么?
报告以下警告:
从'int'
分配给'char *'的整数与指针转换不兼容register int t;
char *s;
double val;
s = printn(val);
t = strlen(s); // <<< breaks on this line
...
char *printn(n)
double n;
{
register char *fmt, *s, *ss;
double absn;
short sign;
....
s = printb("%-0.2f", sign*absn);
for (ss = s; *ss; ++ss);
while (*--ss == '0' || *ss == ' ') *ss = 0;
if (*ss == '.') *ss = 0;
return(s);
}
谢谢。
答案 0 :(得分:6)
char *s;
double val;
s = printn(val);
此时,printn
的声明不在范围内。因此,编译器使用旧的C89规则假定printn
返回int
的implcit声明。
在使用之前声明所有函数。
char *printn(double n);
char *s;
double val;
// ..
s = printn(val);
那会有用。
char *printn(n)
double n;
{
请使用现代语法
char * printn(double n)
{
// implementation