gpt4 book ai didi

c - 为什么 C 编译器允许我使用 strcpy 覆盖字符串文字?

转载 作者:行者123 更新时间:2023-11-30 18:46:58 25 4
gpt4 key购买 nike

为什么下面的代码可以在 Visual Studio 中运行?

char* str1 = "This is a test string";
strcpy_s(str1, strlen(str1), "replacing content");

我的理解是 str1 只是一个 char* 指向字符串文字,而不是字符数组。在 strcpy_s() (或 strcpy())中,char 字节从 src 复制到 dst 数组。

在上面的代码中,strcpy() 不是试图覆盖字符串文字吗?如果是,那么为什么代码可以编译?

附加信息

不仅代码在编译,我还可以看到新字符串被复制。

void stringCopy_demo() {    
char* str1 = "1234567890"; //len = 10
printf("%s \n", str1);
strcpy_s(str1, strlen(str1), "content");
printf("%s \n", str1);
}

输出

1234567890
content

最佳答案

C99 字符串文字是 char[] ,但修改数组是未定义的行为,请参阅 What is the type of string literals in C and C++?

许多编译器都有选项来启用非常量使用警告,例如 gcc 的 -Wwrite-strings

关于c - 为什么 C 编译器允许我使用 strcpy 覆盖字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49834166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com