c++不像我自己的字符串复制函数那样打印

C++ not printing as expected with my own string copy function

本文关键字:函数 打印 复制 字符串 我自己 自己的 c++      更新时间:2023-10-16

很抱歉又出现了一个字符串复制问题。但是我真的找不到为什么在我的代码中,strTo可以打印,但strFinal都不能。

cout << strTo << endl;
cout << strFinal << endl;
while (*strFinal != '') {
    cout << *strFinal++;
}
如果有人能指出我对指针和数组的误解,我将不胜感激!谢谢!
#include <iostream>
using namespace std;
char *str_copy (const char *strFrom, char *strTo) 
{
    while (*strFrom != '') {
        *strTo++ = *strFrom++;
    }
    *strTo = '';
    return strTo;
}
int main()
{
    char strFrom[]="abc123";
    char strTo[10];
    char *strFinal = str_copy(strFrom, strTo);
    cout << strTo << endl;
    cout << strFinal << endl;
    while (*strFinal != '') {
        cout << *strFinal++;
    }
    return 0;
}

额外的问题:

我不知道为什么我把代码像这样放在main函数中:

char strFrom[]="abc123";
char strTo[10];
strTo = str_copy(strFrom, strTo);

然后编译器说:

main.cpp:18:错误:数组类型'char[10]'不可分配strTo = str_copy(strFrom, strTo);~ ~ ~ ~ ~ ^

我应该如何纠正这种方式?谢谢!

函数返回一个指向终止零的指针。

char *str_copy (const char *strFrom, char *strTo) 
{
    //...
    *strTo = '';
    return strTo;
}

按如下方式修改

char *str_copy (const char *strFrom, char *strTo) 
{
    char *p = strTo;
    while ( *p++ = *strFrom++ );
    return strTo;
}

我也会像标准C函数strcpy一样声明它

char *str_copy( char *strTo, const char *strFrom );

至于你的附加问题,那么你可以不给数组分配指针甚至其他数组。因此编译器发出错误。

数组没有赋值操作符。你只能复制它们的元素。否则使用std::array标准类

str_copy返回后,您的strTo不指向您复制的字符串的开始。在main strTo是可以的,因为它是通过值传递的(指针的地址从str_copy返回后不会改变,即使你使用strTo++)。但是strFinal的返回值指向复制字符串的最后一个字符——''

对于第二部分- char[10]有不可更改的地址,所以你不能给这种类型的变量分配任何东西,就像你在strTo = str_copy(...);中尝试的那样。

你的第二个问题:你试图用char*传递char[10],这是不可能的

&strTo[0] = str_copy(strFrom, strTo);

但是这没有用,因为复制是在

里面完成的

在我们的代码中,调用str_copy()函数后:

char *strFinal = str_copy(strFrom, strTo);

strFinal指向"",它位于"abc123"的末尾。

main()函数中的

strTo可以正确显示,因为它不是同一个strTo在str_copy()函数中,但指向strTo[10]。str_copy()中的strTo仍然指向终止零。