0

我想要一种具有固定最大长度的 cstring,比如说 5。如果可能的话,我还希望能够使用标准cstring函数。然而,有了这个,我在函数参数方面遇到了很多问题。我对 typedef 还不是很熟悉,但我不确定这是否是错误的方法,或者我只是错过了一些东西。C++ (mingw-w64)

typedef char Name[5];
std::ostream& operator<<(std::ostream& os, Name& car)
{
    os << car;
    return os;
}

void Change(Name str)
{
    str[2] = '0';
}
Name ChangeRtn(Name str)
{
    str[2] = '1';
    return str;
}
void ChangeCat(Name * strp)
{
    strcat(strp,"3");
}
int main ()
{
    Name test = "abcd";
    Change(test);
    std::cout << test  << std::endl;

    Name test2 = ChangeRtn(test);
    std::cout << test2 << std::endl;

    Name * test3;
    //*test3 = "12"; //incompatible types... make a operator= func
    strcpy (*test3,"12"); //a temp replacement of operater=?
    ChangeCat(test3);
    std::cout << test3 << std::endl;

    return 0;
}

返回错误...

typedef.cpp:15:24: error: 'ChangeRtn' declared as function returning an array
 Name ChangeRtn(Name str)
                        ^
typedef.cpp: In function 'void ChangeCat(char (*)[5])':
typedef.cpp:22:17: error: cannot convert 'char (*)[5]' to 'char*' for argument '1' to 'char* strcat(char*, const char*)'
  strcat(strp,"3");
                 ^
typedef.cpp: In function 'int main()':
typedef.cpp:30:29: error: 'ChangeRtn' was not declared in this scope
  Name test2 = ChangeRtn(test);
                             ^
4

1 回答 1

1

首先,您需要选择您的语言。无论是 C 还是 C++。

接下来...是的,您不能从函数返回数组。您可以这样做作为解决方法:

结构 ArrReturn { 字符 arr[5]; };

然后可以返回此类型。不要问我为什么这样而不是直接排列。

我从 C++ 的角度回答,而不是 C。

于 2016-04-14T01:16:08.723 回答