2012-12-08 55 views
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); 
} 

謝謝。

+2

'register'? K&R式函數定義?又是1982年嗎? – melpomene

+1

關閉!這段代碼實際上是從1983年開始的 – efnx

+1

啊,在1983年,'sizeof(char *)== sizeof(int)'有一個很好的機會。在這種情況下,代碼的工作機會不會太差。 –

回答

6
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 
+0

這工作。非常感謝您的解釋和幫助。 – efnx

相關問題