使用char *

时间:2017-03-02 22:53:32

标签: c++ string char strcpy strcat

我有一个'僵尸翻译的代码'作为我教授的一个例子。据我所知,它需要一串英语单词,并通过函数应用一些规则。它目前使用strcpystrcat来执行此操作,但即使我将其更改为strcpy_s,也无法编译。不包括其他功能(为了空间),这里是我的主要功能作为一个例子

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 个答案:

答案 0 :(得分:0)

来自Microsoft:strncat_s

您需要包含数组的长度以防止缓冲区溢出危险。

API是:

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

numberOfElements是目标数组的大小。