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 ルールを使用するコンパイラはprintnint.

すべての関数は、使用する前に宣言してください。

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 に答える