如何在C++中将字符串赋值给char指针(
char*
)?char *pw = some string
对于常量初始化,您可以简单地使用
const char *pw = "mypassword";
如果字符串存储在变量中,并且您需要创建字符串的副本,则可以使用strcpy()函数。
char *pw = new char(strlen(myvariable) + 1);
strcpy(pw, myvariable);
// use of pw
delete [] pw; // do not forget to free allocated memory
const char *pw
。 - Notinlistpw
,可以像这样做:char *pw = "Hello world";
。std::string
对象,想要将其值赋给pw
,可以这样做:char *pw = some_string.c_str()
。然而,pw
指向的值仅在some_string
的生命周期内有效。some_string
执行突变操作之前,它才被保证有效。 - Bill如果你指的是 std::string
,你可以通过调用 c_str
方法来获取它的 C 风格字符串指针。但是,这个指针需要是 const
类型。
const char *pw = astr.c_str();
如果pw
指向您之前分配的缓冲区,您可能希望将字符串的内容复制到该缓冲区中:
astr.copy(pw, lengthOfBuffer);
const char *pw = "Hello, world".
注意再次出现的const
- 字符串文字不应被修改,因为它们被编译到程序中。
但是如果您在任何地方都使用std::string
,通常会更加方便:
std::string astr("Hello, world");
#include <string>
我认为你可能想要这样做:
using namespace std;
string someString;
geline(cin,someString);
char *pw = strdup(someString.c_str());
但考虑另一种方法。看看http://tiswww.case.edu/php/chet/readline/rltop.html(GNU Readline库)。我不知道它的详细信息,只是听说过它。其他人可能有更详细或其他关于从标准输入读取密码的提示。
如果您只想为某个单独调用使用它,而无需复制someString的内容,则可以直接使用someString.c_str()
,如果需要const char *
,则需要使用它。
您必须在以后的某个时候使用free
来释放pw
。
strdup
很方便,但要注意可移植性问题:https://dev59.com/EXRB5IYBdhLWcg3w4bAo - Manuel字符串必须用双引号括起来,例如:
char *pStr = "stackoverflow";
它将把这个字符串字面量存储在程序的只读内存中。 稍后修改它可能会导致未定义行为。
const char *
进行编写。 - Manuel
char*
参数有时被称为“字符串参数”,但它实际上不是一个字符串,而是一个指向字符串的指针。如果你遇到了堆损坏的问题,那么问题不在于赋值,而在于你对已分配内存的管理。最有可能的是,你不知道关于已分配内存的某些重要信息。即使这一行可以被替换为一个代码片段来阻止程序崩溃,重要的是要理解整个情况。 - Steve Jessop