typedef символьного массива и использование в функциях

Я хочу тип 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);
^

0

Решение

Во-первых, вам нужно выбрать свой язык. Либо С, либо С ++.

Далее … да, вы не можете возвращать массивы из функций. Вы можете сделать это как обходной путь:

struct ArrReturn
{
char arr [5];
};

Этот тип может быть возвращен. Не спрашивайте меня, почему это, а не массив напрямую.

Я отвечаю с точки зрения C ++, а не C.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]