strcpy和strcat的问题

问题描述:

我刚刚了解了cstring库中的cstring和一些函数。当我尝试使用函数strcpy时,我遇到了一个令人困惑的问题。任何人都可以彻底向我解释为什么第一个代码不工作,而第二个代码完全正常工作?strcpy和strcat的问题

首先代码:

char *str1 = "hello"; 
    char *str2 = "hi"; 
    strcpy(str1, str2); 
    cout << str1; 

二码

char str1[] = "hello"; 
    char *str2 = "hi"; 
    strcpy(s1,s2); 
    cout << str1; 

我想这个问题是我如何声明变量STR1,但我仍然不知道为什么当str1和一个它不工作指针。

+1

C++ 11不允许,因为你正在将一个字符串字面值存储在非const char *'中。如果你打开这些,你的编译器可能会发出警告/错误。 – chris

+1

使用'std :: string',所以你不必担心它。还有'char * str1 =“hello”;'应该是编译器错误/警告。如果你没有得到一个你需要调整设置。 – NathanOliver

+0

[strncpy和strcat不工作的方式,我认为他们会C++](http://*.com/questions/29283567/strncpy-and-strcat-not-working-the-way-i-think-they-would- c) –

首先,声明char *str1 = "hello"应该给你一个警告,因为你要分配一个指向字符串文字"hello"(这是const)以非const指针char* str1。但是如果你写了const char *str1 = "hello",那么警告消失,但你会得到一个错误strcpy,因为第一个操作数不能是const

第二种说法是有效的,因为在char str1[] = "hello"中,变量str1实际上是一个数组(不是指针),它的初始值是"hello"的副本。因此,您可以稍后覆盖str1的内容。请注意0​​不是一个指针,而是一个数组;它在指针预期的上下文中使用时,会衰减到指针(指向数组第一个字符的内存)。

+0

请给出降低投票的理由,以便可以改进/纠正答案。 –