2011-07-27 93 views
3

所有我試圖做的是向strcpy添加一個字符串並與短連接。但是,我得到兩個誤差這樣的代碼如下錯誤與strcpy和strcat

struct local_stack_def 
    { 

    char *result; 
    char delims[3]; 
    char user_id_E[200]; 
    short user_maxlen, range_eulm, imp_eulm, len_eulm; 
    char msg_eulm[400]; 
    /*MORE VARIABLE REMOVED TO SHORTEN LENGTH*/ 
    }; 

    short pool_err; 
    struct local_stack_def *l; 


    l = POOL_GETSPACE_(i_exit_cb->Pool_addr,sizeof(struct local_stack_def),&pool_err); 


    /*MORE VARIABLE REMOVED TO SHORTEN LENGTH*/ 

    if (l->resultFR != 0) 
    { 
     l->range_eulm= 1501; 
     strcpy(l->msg_eulm,"FILENAME_RESOLVE_ ERROR - ERROR#:"); 
     strcat(l->msg_eulm, l->resultFR); 

隨着的strcpy和strcat的我得到這些錯誤

strcpy(l->msg_eulm,"FILENAME_RESOLVE_ ERROR - ERROR#:");  
Warning 207: address pointing at code space is taken 

strcat(l->msg_eulm, l->resultFR); 
Warning 86: argument 2 conflicts with formal definition 
+1

肯,歡迎來到SO。什麼類型是l-> resultFR?請向我們提供更多信息。 – 2011-07-27 14:36:58

回答

1

兩個功能上char*工種。 當你在你定義的某個常量字符串上使用strcpy時,這個字符串位於代碼空間中,這可能是一個問題,因此是警告。

第二個錯誤是由於您無法將整數轉換爲字符串而導致的。 當你想打印這個短的值時,你需要將它例如通過sprintf轉換爲char*,並且將其轉換爲char*

+0

我該如何解決代碼空間警告?!? – ken

+0

你可以嘗試對const char *變量進行間接尋址,但問題在於我認爲的其他地方。你使用什麼編譯器? – Nobody

+0

事情是我需要在env Libspace編碼這就是當我開始得到這些錯誤,如果我有env設置在COMMON它運行良好。 – ken

1

您沒有提供關於resultFR(顯然不是const char*)的信息。

您還沒有提供有關您所使用的編譯器的信息,但是從documenation上網絡:

警告207:駐留在代碼空間取對象的地址。該地址的使用僅在與對象相同的代碼段內有效。

1

您需要要麼使用itoa(或其變體之一)

strcat(l->msg_eulm, itoa(l->resultFR)); 

如果你沒有itoa在你的C庫,那麼你可以使用snprintf.OR尋找另一個功能連接之需要一個數字並返回一個char *