此函数在另一个程序中运行良好,但在某些情况下会导致运行时错误,表示某些变量周围的堆栈(有时甚至没有发送到函数中)已损坏。
char *strCpy(char *dest, const char *source) { // copy cstring
char *origin = dest; // non iterated address
while (*source || *dest) {
*dest = *source;
dest++;
source++;
}
return origin;
}
执行功能:
int main() {
std::cout << "Will it crash?\n";
char temp[255];
char b[255];
std::cin >> temp;
strCpy(b, temp);
std::cout << b;
std::cout << "end\n";
return 0;
}
在这种情况下,temp已损坏,但不一定是因为它已传递给函数。我无法解决这个问题。
我编写自己的复制功能的原因是因为对项目的限制。我也不允许使用[]
索引数组
答案 0 :(得分:4)
你在循环条件下的逻辑是有缺陷的,会导致undefined behavior。
目的地的内容是未初始化,因此不确定。你不应该在你的条件下检查目的地,只检查来源:
while (*source) { ... }
当然,您需要将终结符添加到目标。这可以简单地在循环之后完成
*dest = '\0';