2013-04-12 49 views
0

,因爲我們用C知道字符數組,字符串定義是,初始分配使用功能用C

char string[] = "Hello World"; 

這是確定的,

但我想使用的功能,並在初始同樣, 我試過那些,例如;

char * to_string() 
{ 
    return "Hello World"; 
} 

或;

char * to_String(void) // Function 
{ 
    char buff[16]; 
    sprintf(buff, "%s", "Hello World"); 
    return buff; 
} 

main() // main function 
{ 
    char Initial_String[] = to_String(); 
} 

如何使這個或任何想法相同的另一種方式。

我發現我不發送char Initial_String []地址來填充。沒有,還有另一種方法。

謝謝。

回答

0

當你編譯這個,至少在GCC中,它會給你下面的警告: b.c:9: warning: function returns address of local variable 爲什麼?因爲buff[]是函數to_string()的局部變量。它的範圍僅限於功能to_string()main()對此變量沒有任何訪問權限。請嘗試將buff[]改爲全局變量。

第二個問題:char Initial_String[] = to_String();不能以這種方式賦值。 to_string()返回一個字符指針,因此分配這樣的值:

char *Initial_String = to_String(); 

下面的代碼將工作:

char buff[16]; 
char* to_String(void) // Function 
{      
      //char buff[16]; /*this is a local variable*/ 
      sprintf(buff, "%s", "Hello World"); 
      return buff; 
}      

int main(void) // main function 
{      
      char *Initial_String = to_String(); 
      printf("%s", Initial_String); 
      return 0; 
} 
0

是的,你說得對本地緩衝區mismake,

但是這不是我的想要,

如果我編輯一些不同的,

char buff[16]; 
char* to_String(void) // Function 
{      
      //char buff[16]; /*this is a local variable*/ 
      sprintf(buff, "%s", "Hello World"); 
      return buff; 
}      

int main(void) // main function 
{      
      char *Initial_String_1 = to_String(); 
      char *Initial_String_2 = to_String(); 
      char *Initial_String_3 = to_String(); 

      printf("%s", Initial_String_1); 
      printf("%s", Initial_String_2); 
      printf("%s", Initial_String_3); 

在這種情況下,所有的字符串將是一樣的,因爲他們有相同的緩衝區地址,

我想多一點開的話題。

struct 
{ 
    long aaa; 
    short bbb; 
    int ccc; 
    char ddd; 
    . 
    . 
    . // the list goes on 
}elements; 


typedef struct 
{ 
    int lengt; 
    int *adress; 
    char name[10]; 
}_list; 

char* to_String(long variable) // Function 
{      
      sprintf(buff, "%ld", variable); 
      return buff; 
} 

int main (void) 
{ 
_list My_List[] = { 
        { sizeof(elements.aaa), &elements.aaa , to_string(elements.aaa) }, 
        { sizeof(elements.bbb), &elements.bbb , to_string(elements.bbb) }, 
        { sizeof(elements.ccc), &elements.ccc , to_string(elements.ddd) }, 
        . 
        . 
        . //// the list goes on 
       }; 

我不知道,我是否讓自己清楚。 這裏,必須將字符串填充到名稱數組中,而不將其分配給地址。

我可能有語法錯誤。該代碼未經編譯器測試。該想法僅用於說明目的。

我正在試圖找到一種方法的目的。

謝謝。

+0

我可能有語法錯誤 –