2017-03-02 274 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

相关问题