strcpy和strcat的问题

时间:2017-04-13 18:29:14

标签: c++ c-strings

我刚刚了解了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是指针时它不起作用。

1 个答案:

答案 0 :(得分:0)

首先,语句char *str1 = "hello"应该给出警告,因为您要将指向字符串文字"hello"const)的指针指定给非常量指针char* str1。但是如果你写了const char *str1 = "hello",那么警告就会消失,但是strcpy会出错,因为第一个操作数不能是const

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