Zwykle nie jest to problemem, ale są rzeczy, które należy wziąć pod uwagę. Zazwyczaj jest to kwestia stałej stałości, co oznacza śledzenie tego, co można zmienić, a czego nie.
Jeśli zwracasz podwójny ciąg znaków, jest to const char *
, a traktowanie go jak cokolwiek innego jest zaproszeniem na kłopoty. Zmiana takiego ciągu jest niezdefiniowanym zachowaniem, ale zazwyczaj powoduje awarię programu lub zmianę tego łańcucha, niezależnie od tego, do czego się odnosi.
Jeśli zwrócisz tablicę znaków na stosie (tj. Zmienną lokalną wywołanej funkcji), zniknie, a wskaźnik nie wskaże w ogóle nic konkretnego, prawdopodobnie ze złymi wynikami w pewnym momencie.
Jeśli wywoływana funkcja zwraca coś, co już jest const char *
, to zmiana na char *
wymaga rzutowania. Co więcej, jeśli zamierzasz to zmienić, musisz mieć pewność, że można to zmienić. Zazwyczaj lepiej jest zachować go jako const char *
.
Nie ma problemu z natychmiastowym powrocie pamięci przydzielonej z malloc()
lub new
, ale masz problem własności: jaką funkcję powinien free()
/delete
to, kiedy i co robisz uwagę możliwe kopii? Tu właśnie świecą inteligentne wskaźniki C++.
main() powinien zawsze zwracać int! http://users.aber.ac.uk/auj/voidmain.shtml – nmuntz