首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的c-string复制函数破坏了其他变量的堆栈

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

Stack Overflow用户
提问于 2018-06-15 15:36:04
回答 1查看 135关注 0票数 0

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

代码语言:javascript
运行
复制
char *strCpy(char *dest, const char *source) {      // copy cstring
    char *origin = dest;                            // non iterated address
    while (*source || *dest) {
        *dest = *source;
        dest++;
        source++;
    }
    return origin;
}

函数的实现:

代码语言:javascript
运行
复制
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是损坏的,但不一定是因为它被传递到函数中。除了这个之外,我在寻找问题上遇到了困难。

我之所以编写自己的复制函数,是因为项目的限制。我也不允许使用[]来索引数组

EN

回答 1

Stack Overflow用户

发布于 2018-06-15 15:39:09

您在循环条件中的逻辑是有缺陷的,并将导致。

目标的内容未初始化,因此是不确定的。在您的条件下,您根本不应该检查目标,只应该检查源:

代码语言:javascript
运行
复制
while (*source) { ... }

当然,您需要将终止符添加到目的地。这可以在循环之后完成,如下所示

代码语言:javascript
运行
复制
*dest = '\0';
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50871059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档