【发布时间】:2020-01-17 21:42:06
【问题描述】:
编写一个简单的字符串复制器并在 main() 函数中对其进行测试。奇怪的是有时程序会返回
“你好你好”
应该是这样,但也许我每运行三次,程序就会打印出来:
“你好!你好!▌▌▌▌▌▌▌▌▌▌▒“UòB╚”
为什么垃圾数据的尾部有时只添加到我的第二个字符串的末尾?
#include <iostream>
using namespace std;
int strlength(const char* c)
{
int size = 0;
while (*c) {
++c;
++size;
}
return size;
}
char* mystrdup(const char* c)
{
int size = strlength(c);
char* result = new char;
copy(c, c + size, result);
return result;
}
void print_array(const char* c)
{
int size = strlength(c);
while (*c) {
cout << *c;
++c;
}
}
int main()
{
char test[] = "Hello!";
char* res = mystrdup(test);
print_array(test);
print_array(res);
}
【问题讨论】:
-
可能您忘记添加 \0。请退出所有这些东西并使用 STL。如果此代码是您的教学课程的结果,请立即退出。
-
两个词:空终止。第二个
char* result = new char;——只有一个字符? -
编写一个简单的字符串复制器并在 main() 函数中测试它。 -- 在一个不平凡的程序中尝试这个,你会发现维护和使用任何东西看起来这不是那么简单。如果你想提高你的技能,写一个真正的字符串class,而不是这些一次性的字符串操作例程。
-
令人惊讶的是有多少编程课程完全忽略了编程的难点:确保程序在 25 年后仍然有效。
-
@alteredinstance 确实有用的课程,但它们应该在 C 编程课程中教授。在 C++ 课程中教授 C 语言的世界中出现了大量年轻程序员,他们认为自己了解 C++ 而实际上并不了解。
标签: c++ pointers copy c-strings garbage