我正在尝试将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);
}
答案 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 C或good book on C++因为在线教程非常缺乏。