【发布时间】:2020-12-14 04:13:19
【问题描述】:
#include <stdio.h>
#include <string.h>
int main()
{
char t1string[] = "test";
printf("First String value is %s\n", t1string);
strcpy(t1string, "lgs");
printf("Modified First String value is %s\n", t1string);
char * t2string = "test";
printf("Second String value is %s\n", t2string);
strcpy(t2string, "lgs");
printf("Modified Second String value is %s\n", t2string);
return 0;
}
查看上面的一对 strcpy 用法,我试图理解为什么在第二个实例中使用的 strcpy 不起作用,或者它是什么特别错误(我的初学者水平的理解或代码块)?或者它只是告诉我我很愚蠢,因为没有简单地做 t2string = "lgs";?
【问题讨论】:
-
char x[] = "abc"创建一个 4 个字符长的数组(可写),然后将文字字符串复制到数组中(包括字符串终止字符。)char *x = "abc"生成一个指针并指向它在文字字符串(不可写)处 - 然后您尝试将信息 strcpy 转换为指针指向的不可写字符串。不同之处在于您可以将信息复制到数组中,但不能将信息复制到文字字符串中。 -
您发布的代码都不是 C++。它完全是 C。如果是 C++,你将使用 std::string 而不是 strcpy 或 printf。
-
这里有一点解释:onlinegdb.com/HkAqeK43v
-
对于您提出的问题,标签是 C 还是 C++ 并不重要,因为两者都可以编译您发布的代码。如果您只想以惯用的 C++ 方式做事,您不会使用指针或数组 - 您将使用 std::string 和 std::vector 或 std::array 但这实际上并不能回答您的问题,因为您的问题是不是关于编写惯用 C++ 的最佳实践。但是,为了避免让 cmets 不使用 C++ 特定功能,您可以将标签更改为 C
-
char * t2string = "test";这在 C++ 中绝对是非法的,C++ 编译器应该抱怨它。
标签: c++ codeblocks strcpy