微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Visual Studio错误:“ strcpy_s”:调用参数太少

如何解决Visual Studio错误:“ strcpy_s”:调用参数太少

我已经在Code :: Blocks IDE中运行了以下C代码,它可以正常工作而不会出现问题。我尝试在Visual Studio 2015中编译此代码,但出现此错误

'strcpy_s': too few arguments for call

如何以最小的代码更改来解决此问题?这是代码

#include<conio.h>
#include<stdio.h>
#include<string.h>
int main() {
    char string[81];
    int position;
    printf("type a string :");
    gets(string);
    printf("enter position for delete character :");
    scanf_s("%d",&position);
    strcpy_s(&string[position],&string[position + 1]);
    printf("the result string is: ");
    puts(string);
    _getch();
    return 0;
}

Code :: Clocks可以运行此代码并为我提供正确的输出,但Visual Studio不能!我该怎么办?

解决方法

您正在使用strcpy_s,它是lorem10的专门版本,它执行附加的错误检查,并且恰好需要3个参数:

strcpy

我想你真的不需要这个。请使用标准的errno_t strcpy_s(char *dest,rsize_t dest_size,const char *src); 函数:

strcpy

注意:strcpy(&string[position],&string[position + 1]); 也是一样,如果您没有充分的理由说明scanf_s对您更有用,请使用scanf

按照为什么Code :: Blocks编译代码的原因,好吧,它可能只是生成警告而不是中止编译的错误。


好吧,事实证明MSVC对此特别感兴趣,并且不喜欢良好的ol'(更快,更简单)的标准功能。

我更改为scanf_s,但是Visual Studio现在给我这个错误:strcpy

您有两个选择:

  1. 禁用该检查,请参阅以下相关问题和答案:How to use _CRT_SECURE_NO_WARNINGS

    基本上将其添加到文件的顶部(在任何'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation,use _CRT_SECURE_NO_WARNINGS. See online help for details.之前):

    #include
  2. 以正确的方式使用#define _CRT_SECURE_NO_WARNINGS (也请首先检查strcpy_s,否则替换无效):

    position < strlen(string)

    别忘了检查返回值!


最后,当我们使用它时,使用strcpy(&string[position],81 - position,&string[position + 1]); 总是错误的。切勿使用gets(string)。真的很惊讶,MSVC对此没有发出警告。请改用gets()

fgets

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。