strcpy 和 strcat 的问题
Problems with strcpy and strcat
刚刚了解了cstring和cstring库中的一些函数。当我尝试使用函数 strcpy 时,我遇到了一个令人困惑的问题。任何人都可以向我彻底解释为什么第一个代码不起作用而第二个代码运行得很好吗?
第一个代码:
char *str1 = "hello";
char *str2 = "hi";
strcpy(str1, str2);
cout << str1;
第二个密码
char str1[] = "hello";
char *str2 = "hi";
strcpy(s1,s2);
cout << str1;
我想问题是我如何声明变量 str1 但我仍然不知道为什么当 str1 是指针时它不起作用。
首先,语句 char *str1 = "hello"
应该给您一个警告,因为您正在将指向字符串文字 "hello"
(即 const
)的指针分配给非常量指针 char* str1
.但是如果你写 const char *str1 = "hello"
,那么警告会消失,但是你会得到 strcpy
的错误,因为第一个操作数不能是 const
.
第二条语句有效,因为在 char str1[] = "hello"
中,变量 str1
实际上是一个数组(不是指针),它是用 "hello"
的副本初始化的。因此,您可以稍后覆盖 str1
的内容。注意 str1
不是指针而是数组;当在需要指针的上下文中使用时,它会衰减为指针(指向数组第一个字符的内存)。
刚刚了解了cstring和cstring库中的一些函数。当我尝试使用函数 strcpy 时,我遇到了一个令人困惑的问题。任何人都可以向我彻底解释为什么第一个代码不起作用而第二个代码运行得很好吗?
第一个代码:
char *str1 = "hello";
char *str2 = "hi";
strcpy(str1, str2);
cout << str1;
第二个密码
char str1[] = "hello";
char *str2 = "hi";
strcpy(s1,s2);
cout << str1;
我想问题是我如何声明变量 str1 但我仍然不知道为什么当 str1 是指针时它不起作用。
首先,语句 char *str1 = "hello"
应该给您一个警告,因为您正在将指向字符串文字 "hello"
(即 const
)的指针分配给非常量指针 char* str1
.但是如果你写 const char *str1 = "hello"
,那么警告会消失,但是你会得到 strcpy
的错误,因为第一个操作数不能是 const
.
第二条语句有效,因为在 char str1[] = "hello"
中,变量 str1
实际上是一个数组(不是指针),它是用 "hello"
的副本初始化的。因此,您可以稍后覆盖 str1
的内容。注意 str1
不是指针而是数组;当在需要指针的上下文中使用时,它会衰减为指针(指向数组第一个字符的内存)。