为什么以下代码在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
答案 0 :(得分:2)
C99字符串文字是char[]
,但修改数组是未定义的行为,请参阅What is the type of string literals in C and C++?
。
许多编译器都可以选择为非常量使用启用警告,例如gcc' -Wwrite-strings