c++ - 自定义字符串类的奇怪输出
问题描述
我正在尝试在 C++ 中创建一个自定义字符串类。但是,当我尝试输出字符串的值时,我得到的值+一堆垃圾。
班级:
unsigned str_len;
char* str_val; // Both set as private in the header file
str::string::string(const char* value) {
if (value) {
unsigned n = 0;
while (value[n] != '\0')
n++;
str_val = new char[n];
str_len = n;
for (unsigned i = 0; i < n; i++)
str_val[i] = value[i];
}
else {
str_val = new char[0];
str_len = 0;
}
}
unsigned str::string::len() { return str_len; }
char* str::string::val() {
char* value = new char[str_len];
for (unsigned i = 0; i < str_len; i++)
value[i] = str_val[i];
return value;
}
主文件:
int main() {
str::string test("test");
std::cout << "String length: " << test.len() << std::endl;
std::cout << "String value: " << test.val() << std::endl;
}
预期输出:
String length: 4
String value: test
实际输出:
String length: 4
String value: test²²²²¼s╜ù÷f
解决方案
您缺少新字符串末尾的 '\0' 。它没有被复制到 str_val 中(你只是短暂地停下来)。
由于您似乎希望 str_len 表示可打印字符的数量,因此我建议您将 value 分配为更大,并将最后一个字符设为 '\0'。
char* str::string::val() {
char* value = new char[str_len + 1];
for (unsigned i = 0; i < str_len; i++)
value[i] = str_val[i];
value[str_len] = '\0';
return value;
}
推荐阅读
- javascript - 重置表单未单击任何按钮 - Angular
- python - SyntaxError:ipython 中的 executable_path 语法无效
- java - 自动按字母顺序对成员变量进行排序
- batch-file - 使用参数延迟shutdown.exe
- bash - Bash 扩展之谜
- kubernetes - 使用 Prometheus 监控自定义 kubernetes pod 指标
- hyperledger-composer - 导入 bna 文件:无法获取链码的包
- java - 返回布尔值的嵌套 for 循环上的死代码
- r - 用不同的 y 标签长度对齐两个图的 x 轴
- javascript - 深度克隆后嵌套对象变为空