不兼容的整数到指针转换从'int'分配给'char *'

时间:2012-12-08 23:04:37

标签: c

以下代码与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);
}

谢谢。

1 个答案:

答案 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