Visual Studio 不支持 C 语言中的strcpy_s函数

Visual studio doesn't support strcpy_s function in C

提问人:Harry 提问时间:11/13/2023 最后编辑:πάντα ῥεῖHarry 更新时间:11/14/2023 访问量:106

问:

我是 C++ 的新手,目前使用 Visual Studio 进行编码。由于某种原因,我的不起作用strcpy_s()

#include<iostream>
#include<cstring>

int main(){
    char a[]="Hello World!";
    strcpy_s(a+6,"C++");
    std::cout<<a;
}

该程序应打印“Hello C++”,但不会。

我尝试了其他编辑器(包括在线 C++ IDE),此问题已修复。有没有办法在Visual Studio中解决此问题?

谢谢!

C++ Visual-Studio 错误处理 C-strings strcpy

评论

1赞 πάντα ῥεῖ 11/13/2023
代码具有未定义的行为。也不是标准功能,请参阅 stackoverflow.com/questions/36491687/...strcpy_s()
1赞 Paul Sanders 11/13/2023
@πάνταῥεῖ en.cppreference.com/w/c/string/byte/strcpy。我很惊讶代码甚至可以编译。
1赞 πάντα ῥεῖ 11/13/2023
@paul对不起,只是意识到这一点。
5赞 BoP 11/13/2023
如果编译器说 ,则解决方案不是在调用中添加 ,而是禁用警告 如何使用_CRT_SECURE_NO_WARNINGSstrcpy is depreceated, use strcpy_s instead_s
6赞 john 11/13/2023
完全标准的 C/C++ 函数的“弃用”只存在于 Microsoft 的想象中。也就是说,您不应该使用此函数和其他 C 样式字符串函数。您应该改用 C++ 字符串类。任何通过教你 C 字符串来开始你的 C++ 之旅的学习资源都是不值得追求的。strcpystd::string

答:

0赞 Minxin Yu - MSFT 11/14/2023 #1

strcpy_s需要dest_size。如果源字符串和目标字符串重叠,则未定义strcpy_s的行为。

#include<iostream>

int main() {
    char a[] = "Hello World!";  
    strcpy_s(a + 6, strlen("C++")+1, "C++");
    std::cout << a;
}

可能的输出: 你好 C++

另一种解决方案:

#include<iostream>


int main() {
    char a[] = "Hello World!";  
    char b[20];
    strncpy_s(b, sizeof(b), a, 6);
    strcat_s(b, sizeof(b), "C++");
    std::cout << b;
}

评论

0赞 Minxin Yu - MSFT 11/17/2023
嗨,你的问题@Harry解决?