2017-03-02 71 views
-3

我的代碼爲「殭屍翻譯」作爲示例來自我的教授。從我可以告訴它需要一串英文單詞,並通過函數應用一些規則。它目前使用strcpystrcat來做到這一點,但即使我將它們更改爲strcpy_s,它也不會編譯。而不包括其他功能(對於空間的緣故),這裏是我的主要功能爲例使用char *替代已棄用的strcpy/strcat *

int main() 
{ 
char english[MAX]; 
char zombie[MAX]; 
char zombie_word[MAX]; 
int pos_e; /* Current position in english line of text */ 
int pos_z; /* Current position in line of translated zombie text */ 

while (1) { 
    pos_e = 0; 
    pos_z = 0; 
    strcpy(zombie, ""); 

    cout << ("Enter English text: "); 
    cin >> english; 

    /* This loop translates the line from english to zombie. */ 
    do 
    { 
     get_next_word(english, &pos_e, zombie, &pos_z); 

     translate_word(english, &pos_e, zombie_word, &pos_z); 

     strcat(zombie, zombie_word); 

    } while (pos_e < strlen(english)); 

    print_translation(zombie); 
} 
return 0; 
} 

所以更具體,我應該怎麼做才能行strcat(zombie, zombie_word);使它在Visual Studio 2015年正確編譯?

這不是一個等級,我真的很想在中期之前就能理解這一點,而且玩起來有點困難。我寧願不必通過_CRT_SECURE_NO_WARNINGS來禁用它,以便我知道如果我需要做類似的事情該怎麼做。

也許改變char變量爲字符串或類似的東西?我一直在尋找一段時間,並找不到實際的過程。 非常感謝您的任何幫助,我非常感謝您的時間。

+1

你可以分享什麼問題與strcpy_s?對於C++來說更好的解決方案是std :: string,但是你可能需要知道如何在某個階段使用strcpy_s。 –

+0

在C++中,正確的答案几乎總是將'char *'轉換爲'std :: string',但當您用_s版本替換'strcat'和朋友時出於興趣,出了什麼問題?您是否閱讀了[文檔頁面](https://msdn.microsoft.com/en-us/library/d45bbxx4.aspx)以瞭解兩者之間的差異? – user4581301

+0

我的錯誤似乎只存在於其他函數中,我得到消息strcpy_s錯誤:沒有重載函數「strcpy_s」的實例匹配參數列表。 – lana

回答

0

從微軟:strncat_s

您需要包括陣列,以防止緩衝區溢出危險的長度。

API是:

errno_t strncat_s( 
    char *strDest, 
    size_t numberOfElements, 
    const char *strSource, 
    size_t count 
); 

numberOfElements是目標數組的大小。

+0

稍微多一點。 'strncpy_s'在溢出,截斷,崩潰,調用自定義處理程序上有一些額外的選項... – user4581301

+0

'''strncpy_s(zombie,「」「);''' 現在產生錯誤:沒有重載的實例函數「strncpy_s」匹配參數列表。我對誤解抱歉,我需要將數組的長度放在palenthesis中? – lana

+0

謝謝!它現在正在工作。 – lana

相關問題