【发布时间】:2023-03-31 16:22:01
【问题描述】:
我遇到了一些困扰我的事情
char* p = "Hello";
strcpy (p,"bye");
这总是给我一个错误,那么我怎样才能将 strcpy 与指针字符串一起使用。
(请不要告诉我使用 std::string)
谢谢
【问题讨论】:
标签: c++ arrays string pointers strcpy
我遇到了一些困扰我的事情
char* p = "Hello";
strcpy (p,"bye");
这总是给我一个错误,那么我怎样才能将 strcpy 与指针字符串一起使用。
(请不要告诉我使用 std::string)
谢谢
【问题讨论】:
标签: c++ arrays string pointers strcpy
char* p = "Hello"; //BAD - OBSOLETE!
strcpy (p,"bye");
一个好的编译器应该在第一行给出警告(或错误),因为那已经过时了,语言要求你写成:
char const * p = "Hello"; //GOOD
一旦你写了这个(无论如何这是正确的写法),那么一切都会变得清晰:p 指向 const 数据,表示p 指向的数据 不能被修改,这反过来意味着,您不能使用strcpy(或手动)覆盖它。
如果你想覆盖它,一种将p 声明为数组的方法:
char p[] = "Hello"; //OK
strcpy (p,"bye"); //OK - for any string (2nd arg) of length <= 5
在 C++ 中,您应该使用std::string,尽可能避免使用char* 和char[]。所以用 C++ 编写代码的方式是这样的:
#include <string> //must include this first
std::string p = "Hello";
p = "bye"; //overwrite it.
这么简单!
【讨论】:
strcpy。您不能使用 const char * 或字符串文字作为目标。
p[] 的解决方案也会导致问题。而且,如果您打算使用 C++,请以正确的方式使用它并使用 std::string,它根本不会受到伤害。 :)
首先,你应该为你的字符串分配内存,像这样:
char *p = new char[BUFFER_LENGTH];
然后你可以将内容复制进去:
strcpy(p, "bye");
请参阅this page 了解其使用方法。
完成后不要忘记删除内存:
delete[] p;
如果我对您的问题的理解有误,您也可以提供更多信息
【讨论】:
const int BUFFER_LENGTH = 100;