2016-11-14 131 views
-1

我嘗試從函數返回字符數組。我是C新手,並嘗試學習函數返回值。 這是我的代碼:函數返回字符數組C

int main() 
{ 
unsigned int nr; 
unsigned int mask=32; 

char *outString; 

printf("Enter Nr:\n"); 
scanf("%u",&nr); 

outString = getBinary(nr,mask); 
printf("%s",outString); 
//getch(); 
return 0; 
} 

char * getBinary(int nr,int mask) 
{ 
static char outPut[sizeof(mask)]=""; 
while(mask>0) 
{ 
if((nr&mask)==0) 
    { 
     strcat(outPut,"0"); 
    } 
    else 
    { 
     strcat(outPut,"1"); 
    } 
    mask=mask>>1; 
    } 

//printf("%s",outPut); 
return outPut; 
} 

我不能讓程序工作!有兩個函數調用錯誤。

+1

你得到什麼錯誤? –

+0

函數的隱式聲明。並賦值使指針ROM整數與一個鑄造。 –

+3

試着把一個'char * getBinary(int nr,int mask)'原型放在'''' – artm

回答

0

感謝所有的答案,我的問題,通過前主加入函數原型解決。關於數組大小[sizeof()]它只是爲了測試,對於實時代碼,我認爲更多的alloc()會更加餬口。

2

主要問題是,sizeof(mask)沒有做你認爲它的事情。這相當於sizeof(int),這不是你想要的。

爲了達到這個目的,你最好堅持一個指針和內存分配器的功能。

僅供參考,看不到問題目前與

static char outPut[sizeof(mask)] ""; 

sizeof是一個編譯時操作,因此這outPut不是VLA。只要你嘗試改變它

static char outPut[mask] = ""; 

你要面對的問題,因爲

  • VLAS是局部範圍不完整的類型,static存儲是不允許的。
  • 您無法初始化VLA。

此外,如果您打算在main()之後定義它,則必須提供原型(前向聲明)至getBinary()

+0

返回一個局部變量(數組)'outPut'導致UB,即使它是靜態的? – Gopi

+1

他的問題是他沒有函數原型'getBinary()' – Gopi

+0

@Gopi還有一個更大的,隱藏的, –

0

您可以更改程序類似以下內容:

#include <stdio.h> 
#include <string.h> 
char * getBinary(int nr,int mask); // add function header, it necessary to avoid compilation error 
//otherwise you can move getBinary function before your main function, because the compilator cannot recognize your function when it is defined after the call. 
int main() 
{ 
unsigned int nr; 
unsigned int mask=32; 

char *outString; 

printf("Enter Nr:\n"); 
scanf("%u",&nr); 

outString = getBinary(nr,mask); 
printf("%s",outString); 
//getch(); 
return 0; 
} 

char * getBinary(int nr,int mask) 
{ 
static char outPut[sizeof(mask)]=""; 
while(mask>0) 
{ 
if((nr&mask)==0) 
    { 
     strcat(outPut,"0"); 
    } 
    else 
    { 
     strcat(outPut,"1"); 
    } 
    mask=mask>>1; 
    } 

//printf("%s",outPut); 
return outPut; 
}