1

下面的代码因 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);
}

谢谢你。

4

1 回答 1

7
char *s;
double val;

s = printn(val);

此时,printn范围内没有声明。因此,编译器使用旧的 C89 规则,假定隐含声明printn返回一个int.

在使用它们之前声明所有函数。

char *printn(double n);
char *s;
double val;
// ..
s = printn(val);

那会奏效。

char *printn(n)
double n;
{

请使用现代语法,

char * printn(double n)
{
    // implementation
于 2012-12-08T23:07:13.637 回答