Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中为char*pw分配字符串+;_C++ - Fatal编程技术网

C++ 如何在c+中为char*pw分配字符串+;

C++ 如何在c+中为char*pw分配字符串+;,c++,C++,如何在c中为char*pw分配字符串++ 像 char*pw=某个字符串 ?对于持续初始化,您只需使用 const char *pw = "mypassword"; 如果字符串存储在变量中,并且需要复制该字符串,则可以使用strcpy()函数 如果您只想为pw分配一个字符串文字,您可以像char*pw=“Hello world”那样执行此操作 如果你有一个C++ STD::String 对象,你要分配给它的值 pW,你可以像 char *pw=StraseStry.cString()/Cut

如何在c中为char*pw分配字符串++

char*pw=某个字符串


对于持续初始化,您只需使用

const char *pw = "mypassword";
如果字符串存储在变量中,并且需要复制该字符串,则可以使用strcpy()函数


如果您只想为
pw
分配一个字符串文字,您可以像
char*pw=“Hello world”那样执行此操作


如果你有一个C++ <代码> STD::String 对象,你要分配给它的值<代码> pW<代码>,你可以像<代码> char *pw=StraseStry.cString()/Cuth>那样做。但是,

pw
指向的值仅在
某些\u字符串的生存期内有效。如果您指的是
std::string
,则可以通过调用
C\u str
从中获取指向C样式字符串的指针。但是指针必须是
const

const char *pw = astr.c_str();
如果
pw
指向您以前分配的缓冲区,您可能希望将字符串的内容复制到该缓冲区中:

astr.copy(pw, lengthOfBuffer);
如果以字符串文字开头,则它已经是指针:

const char *pw = "Hello, world".
请再次注意
常量
——不应修改字符串文字,因为它们已编译到程序中

但是如果您在任何地方都使用
std::string
,您通常会过得更好:

std::string astr("Hello, world");
顺便说一下,您需要包括正确的标题:

#include <string>
#包括

字符串必须用双引号括起来,如:

char*pStr=“stackoverflow”

它将把这个字符串文本存储在程序的只读内存中。
以后对其进行修改可能会导致UB。

我想您可能需要这样做:

using namespace std;
string someString;
geline(cin,someString);
char *pw = strdup(someString.c_str());
请考虑用另一种方式做。签出(GNU Readline库)。我不知道细节,只是听说了。其他人可能会有更详细的提示或其他从标准输入读取密码的提示

如果您只想对某个对象进行一次调用,而不需要复制someString的内容,则可以直接使用
someString.c_str()
,如果需要它作为
const char*


一段时间后,您必须在
pw
上使用
free

char*pw=“some string”;这不是您期望的吗?如果我使用like char*pw=“some string”;我有个例外。“堆的腐败”这是一个“后退一步”的问题。您不能将字符串真正“分配”给
char*
,因为尽管
char*
参数有时被称为“字符串参数”,但它实际上不是字符串,而是指针(指向字符串)。如果堆损坏,那么问题不在于分配,而在于分配内存的管理。最有可能的是,分配的内存中有一些您不知道的重要信息。即使这一行可以替换为一段代码片段来阻止程序崩溃,重要的是要了解整个情况;我有个例外。“堆损坏”-karthik 4秒前编辑[delete this comment]@Mac-您的代码可以工作是因为C兼容,但最好使用
const char*
,因为C++11这实际上是无效的,不会编译。在C++11之前,这是一个糟糕的做法,不推荐使用。
strdup
很方便,但要注意可移植性问题:你应该在文本上使用
const char*pw
。在第一个示例中,我需要释放pw指针吗?如果不需要,编译器如何知道何时以及如何释放它。第一个示例不使用动态内存,因此,不需要释放任何已分配的缓冲区。只有在对
某些字符串执行变异操作之前,才能保证缓冲区有效。
using namespace std;
string someString;
geline(cin,someString);
char *pw = strdup(someString.c_str());