我刚刚了解了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是指针时它不起作用。
答案 0 :(得分:0)
首先,语句char *str1 = "hello"
应该给出警告,因为您要将指向字符串文字"hello"
(const
)的指针指定给非常量指针char* str1
。但是如果你写了const char *str1 = "hello"
,那么警告就会消失,但是strcpy
会出错,因为第一个操作数不能是const
。
第二个语句有效,因为在char str1[] = "hello"
中,变量str1
实际上是一个数组(不是指针),它使用一个简称"hello"
的副本进行初始化。因此,您可以稍后覆盖str1
的内容。请注意,str1
不是指针而是数组;在预期指针的上下文中使用它时,它会衰减到指针(指向数组第一个字符的内存)。