我的c-string复制函数正在破坏其他变量的堆栈

时间:2018-06-15 07:36:04

标签: c++

此函数在另一个程序中运行良好,但在某些情况下会导致运行时错误,表示某些变量周围的堆栈(有时甚至没有发送到函数中)已损坏。

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已损坏,但不一定是因为它已传递给函数。我无法解决这个问题。

我编写自己的复制功能的原因是因为对项目的限制。我也不允许使用[]索引数组

1 个答案:

答案 0 :(得分:4)

你在循环条件下的逻辑是有缺陷的,会导致undefined behavior

目的地的内容是未初始化,因此不确定。你不应该在你的条件下检查目的地,只检查来源:

while (*source) { ... }

当然,您需要将终结符添加到目标。这可以简单地在循环之后完成

*dest = '\0';