【发布时间】:2020-04-15 13:57:14
【问题描述】:
这是一个问题。当我尝试使用 strncpy_s 对其进行转换时,数组末尾有一些来自内存的“垃圾数据”。即使我用“\0”填充缓冲区。怎么转换清楚?
typedef class Ryadok {
private:
int LengthOf = 0;
char text[20];
string* address;
public:
Ryadok(string strin) {
this->text[0] = '\0';
memset(text, '\0', sizeof(text));
strncpy_s(text, strin.c_str(), sizeof(text) - 1);
this->address = &strin;
for (int i = 0; i < sizeof(strin); i++) {
cout << this->text[i];
}
}
~Ryadok() {
}
}*cPtr;
int main()
{
Ryadok example("sdsdfsdf");
}
【问题讨论】:
-
一个问题——为什么需要复制到一个字符数组?为什么不将所有内容都保留为
std::string?其次,this->address = &strin;——这不起作用,因为strin是一个临时变量。为什么typedef class?为什么不简单地class? -
您的任务将无法运行——您认为该函数返回后会发生什么?临时变量
strin会发生什么?它消失了——那么你存储的地址会指向什么? -
看起来更像是Rube Goldberg 解决问题的尝试。
-
sizeof(strin)并没有按照你的想法去做。 -
只需将值
string strin存储到string address(注意address不再是pointer)。然后,通过address,您将可以分别使用address.c_str( )和address.data()访问底层const char*或char*
标签: c++ arrays string char strncpy