gpt4 book ai didi

传递给函数的 C++ strcpy 指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:48:47 26 4
gpt4 key购买 nike

我将一个字符串或一个字符数组传递给一个函数并交换它们,但由于某种原因丢失了第一个字符数组的值。这是我的代码:

void foo(char* a, char* b){

char* temp;

temp = new char[strlen(a)+1];
strcpy(temp, a);
strcpy(a, b);
strcpy(b, temp);

delete[] temp;
}

所以在 foo 中,函数被传递了两个指针,并且试图交换它们。这是主要功能。变量的传递可能有问题,但是编译器没有给我 issue。

int main(){

char a[] = "First";
char b[] = "Last";

std::cout << "A Before: "<< a << "\n";
std::cout << "B Before: " << b << "\n\n";

foo(a, b);

std::cout << "A After: "<< a << "\n";
std::cout << "B After: "<< b << "\n\n";

return 0;
}

我得到的输出如下:

A Before: first
B Before: last

A After:
B After: first

现在我已经在 strcpy 期间在函数中测试了字符串的值,并在最终 strcpy 之后变为空,这意味着,或者至少我认为,问题在于指向原始变量的指针。它可能是所有指针都指向“a”的链式 react 类型,它会混淆程序。

任何帮助将不胜感激,为什么会发生这种情况也将非常有用。

最佳答案

因为你的字符串 ab 长。所以 strcpy 不能像你期望的那样工作:

strcpy(b, temp);

提示:

  • 使用strncpy而不是 strcpy
  • 使用 C++ Strings而不是 c 风格的字符串。然后你可以交换它们与 a.swap(b);

关于传递给函数的 C++ strcpy 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18776620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com