“strncpy_s”不起作用

时间:2015-02-17 13:54:17

标签: c++ strncpy

我正在尝试将strncpy_s用于从一个单词到一个数组的字符(我不能在Visual Studio 2013中使用strncpy而且我对strncpy_s完全不熟悉)。无论我做什么,我都会一直收到这些错误:

  

错误1错误C2660:'strncpy_s':函数不带3个参数

     

错误2 IntelliSense:没有重载函数的实例“strncpy_s”   匹配参数列表参数类型是:(char *,char,int)

我的代码的目的是:

如果用户输入,例如“ HELLO ”(即text = HELLO) 然后 - >

Copy HELLO to first_array [0]
Copy  ELLO to first_array [1]
Copy   LLO to first_array [2]
Copy    LO to first_array [3]
Copy     O to first_array [4]

这是我的代码:

int _tmain(int argc, _TCHAR* argv[])
{
    char text[32];
    cin >> text;
    char* first_array[] = {""};
    int n = strlen(text);

    for (int i = 0; i < n; i++)
    {
        strncpy_s(first_array[i], text[i], n-i);
    }
}

编辑1 。修改了一下代码,现在程序运行了,但输入文本后,它突然给我“example.exe停止工作”错误。

int _tmain(int argc, _TCHAR* argv[])
{
    char* text[32];
    cin >> *text;
    char* first_array[] = {""};
    //int n = strlen(text);
    int n = sizeof(text);

    for (int i = 0; i < n; i++)
    {
        strncpy_s(first_array[i], n - i, text[i], 32);
    }

1 个答案:

答案 0 :(得分:1)

您的代码有几个问题。

首先,您对strncpy_s的来电不遵循declaration of strncpy_s,其中列出了四个参数(如果第一个参数为char *,则为你的情况):

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

但更重要的是,您声明您希望在数组first_array[]中结束多个字符串,每个字符串都包含比最后一个更短的输入字符串版本。 但您声明的first_array[]只包含一个 char *字符串,您初始化first_array[0]的字符串,这正是一个字符长(终止空字节)

char* first_array[] = {""};

即使您声明它要保存 5 char *(无论如何都要进行内容复制时无需初始化)...

char * first_array[5];

...您仍然没有为五个char *字符串中的每一个分配内存空间。你只有五个指针无处指向,并且必须动态分配内存,取决于用户输入

因为我甚至没有谈到如果用户输入超过五个字符会发生什么,更不用说32 ...

此时,即使我 发布“工作”代码,它也会教你很少。您显然正在学习某种教程,或者实际上是试图通过试用和学习来学习。错误。我认为这里的正确答案是:

获取不同的教程。更好的是,获得good book on Cgood book on C++因为在线教程非常缺乏。