Rückgabe eines pointers auf array



  • @Wade1234 sagte in Rückgabe eines pointers auf array:

    ...
    das wäre die lösung, wenn man das array selbst zurück gibt, aber die aufgabe verlangt doch einen zeiger auf ein array, oder nicht?

    ?!?


  • Mod

    @Wade1234 sagte in Rückgabe eines pointers auf array:

    das wäre die lösung, wenn man das array selbst zurück gibt, aber die aufgabe verlangt doch einen zeiger auf ein array, oder nicht?

    Das ist halt einfach nur Arghhhh! In keiner Sprache, weder C, noch C++, noch Fortran, war es je korrekt, einen Handler auf eine dynamische Ressource aus einer Funktion zurück zu geben (außer aus der Funktion zur Anforderung derselben). Die einzigen Leute, die so etwas machen, sind die, die überhaupt keine Ahnung von irgendwelcher Programmstruktur haben, und ihr Wissen leider viel zu oft an Schulen weitergeben. Das ist ganz unabhängig von der Sprache. C mit cout könnte man ja sogar verkraften, wenn es wenigstens gutes, dogmatisches C wäre. Aber die Leute, die C mit cout lehren, machen halt auch immer solche Bockmistfunktionen wie diese hier. Das kann man gar nicht korrekt lösen so.

    Für eine korrekte, dogmatische C-Lösung schaue man sich strcat an. So hat die Signatur einer Funktion auszusehen, die zwei Folgen aneinander hängt! Am besten dazu auch mal das K&R-Buch lesen, wo viele der C-Stringfunktionen hergeleitet werden und erklärt wird, wieso das gut ist, das so zu machen.



  • @SeppJ sagte in Rückgabe eines pointers auf array:

    Das liegt daran, dass dein Kurs dir eine Denkweise beigebracht hat, wie sie ein schlechter Möchtegern-Fortan-Hacker 1960 gehabt hat, nicht wie man heutzutage Computer programmiert. Weder in C++ noch in C (und auch nicht in modernem Fortran).

    Das hat mit Fortran nichts zu tun, da bei altem Fortran überhaupt keine dynamischen Arrays möglich waren. D.h. die Aufgabestellung ergibt in Fortran77 oder älter keinerlei Sinn.



  • @SeppJ sagte in Rückgabe eines pointers auf array:

    Für eine korrekte, dogmatische C-Lösung schaue man sich strcat an. So hat die Signatur einer Funktion auszusehen, die zwei Folgen aneinander hängt! Am besten dazu auch mal das K&R-Buch lesen, wo viele der C-Stringfunktionen hergeleitet werden und erklärt wird, wieso das gut ist, das so zu machen.

    Wie terminierst Du ein Array of int in C? ernstgemeint.
    Ich glaube ich würde INT_MIN dafür wegwerfen. Fairerweise.


  • Mod

    @john-0 sagte in Rückgabe eines pointers auf array:

    Das hat mit Fortran nichts zu tun, da bei altem Fortran überhaupt keine dynamischen Arrays möglich waren. D.h. die Aufgabestellung ergibt in Fortran77 oder älter keinerlei Sinn.

    Ja eben. Deswegen erklär ich ja, dass das noch nie in irgendeiner Sprache jemals richtig war. Aber das ist halt das typische Pattern von Leuten, die vor 50 Jahren mal mit Fortran oder Pascal im Eigenstudium angefangen haben; niemals Feedback von guten Programmierern hatten; und nun meinen, sie könnten C++ lehren, indem sie BEGIN durch { ersetzten.



  • @Swordfish sagte in Rückgabe eines pointers auf array:

    Wie terminierst Du ein Array of int in C? ernstgemeint.
    Ich glaube ich würde INT_MIN dafür wegwerfen. Fairerweise.

    Again.

    Und: Eigentlich hasse ich es irgendwas von new T[] oder std::*alloc() zurückgegebenes als Array zu bezeichnen. Daher würde ich betreffendem Dozenten die Aufgabe zurückwerfen und sagen daß was er fordert nicht möglich ist. Problem solved.



  • @SeppJ

    Ziemlich ernüchternd zu lesen, dass einem im Studium veraltete und zudem falsche Inhalte beigebracht werden.
    Danke für eure Lösungsansätze.
    Könnt ihr mir dann seriöse Quellen zum Lernen von sinnvollem C++ empfehlen?


  • Mod

    @Swordfish sagte in Rückgabe eines pointers auf array:

    Wie terminierst Du ein Array of int in C? ernstgemeint.
    Ich glaube ich würde INT_MIN dafür wegwerfen. Fairerweise.

    Bitte auf höherem Niveau mitdenken. Es geht nicht darum, dass der String terminiert ist, sondern darum, wie strcat grundlegend funktioniert und vor allem, was nicht seine Aufgabe ist und was es deswegen nicht tut. Es nimmt Information entgegen, welche Daten aneinander gehängt werden, und es nimmt Information entgegen, wo diese hin sollen. Es ist macht kein Ressourcenhandling! Es gibt keine statischen Ressourcen zurück! Es macht seine eine Aufgabe und macht diese Aufgabe gut und sehr strikt nach den Regeln und best practices der Sprache C.



  • @SeppJ Ok. 1:0.


  • Mod

    @onzeq sagte in Rückgabe eines pointers auf array:

    Könnt ihr mir dann seriöse Quellen zum Lernen von sinnvollem C++ empfehlen?

    Der Standardlink:
    https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

    Aktiv zu meiden:

    • Es sind keine guten Videotutorials bekannt.
    • Alle Bücher, wo vollständiger ('komplett', 'von A bis Z'), schneller ('in 21 Tagen', und/oder einfacher ('für Dummies') Lernerfolg versprochen wird.
    • Leider sieht es auch bezüglich der deutschen Sprache recht düster aus. Wer gut genug ist, ein tolles Buch zu schreiben, der schreibt auch auf Englisch. Entweder, um ein größeres Publikum zu erreichen, und oft auch weil sie einfach US-Amerikaner sind.


  • @SeppJ sagte in Rückgabe eines pointers auf array:

    Es macht seine eine Aufgabe und macht diese Aufgabe gut und sehr strikt nach den Regeln und best practices der Sprache C.

    Nicht wirklich, es macht den Dest String radikal platt, ob für den Source String Platz vorhanden ist oder nicht. Solche Funktionen haben den schlechten Ruf von C begründet. Nur noch gets übertrifft das.


  • Mod

    @john-0 sagte in Rückgabe eines pointers auf array:

    @SeppJ sagte in Rückgabe eines pointers auf array:

    Es macht seine eine Aufgabe und macht diese Aufgabe gut und sehr strikt nach den Regeln und best practices der Sprache C.

    Nicht wirklich, es macht den Dest String radikal platt, ob für den Source String Platz vorhanden ist oder nicht. Solche Funktionen haben den schlechten Ruf von C begründet. Nur noch gets übertrifft das.

    Es gibt halt Leute, die die Prinzipien von C verstehen, und solche, dies nicht tun. Du verwechselst auf jeden Fall "es ist nach den Prinzipien gemacht, die für C vorgesehen sind" mit "ich halte die Prinzipien von C für gut".



  • Ein bisschen off topic...
    Ich kann mich gar nicht wirklich dran erinnern, was ich im Studium in C++ gelernt habe. Ich fands nicht gut, weil wir weder was über STL noch RAII oder ähnliches gelernt haben. Aber das war bestimmt auch nicht so grausam schlecht.
    Eine Vorlesung war wohl ziemlich oberflächliche Grundlagen... Hauptsächlich Klassen und Objektorientierung, vermutlich ziemlich schlecht, aber es kam zumindest Liskovsches Substitutionsprinzip zur Sprache. Sonst kann ich mich nicht an viel erinnern. Weiß gar nicht, ob wir irgendwelche Aufgaben hatten. Wenn, dann hab ich die ignoriert. Das ist wohl zielführender.
    Und eine andere Vorlesung dann später, da gings mehr um Templates, partielle Spezialisierungen usw... Immer noch kein idiomatisches C++, aber etwas anspruchsvoller und wieder kein hässlicher Quatsch, wie ich das hier im Forum ständig sehe.



  • @SeppJ sagte in Rückgabe eines pointers auf array:

    Es gibt halt Leute, die die Prinzipien von C verstehen, und solche, dies nicht tun. Du verwechselst auf jeden Fall "es ist nach den Prinzipien gemacht, die für C vorgesehen sind" mit "ich halte die Prinzipien von C für gut".

    Ich will es mal so formulieren. Es gibt K&R C, da passt strcat und gets gut dazu, und es gibt ein späteres C das eben eine ganz andere Stil der C APIs pflegt. K&R C ist nicht unbedingt das, was man aktuell noch vermitteln sollte. (Und genau aus dieser Philosophie entsprang diese Übungsaufgabe.) Ein Beispiel dafür was ich meine: MySQL hat eine query function (mysql_query) und PostgreSQL hat eine query function (PQexecParams). Die von PostgreSQL lässt sich typischer und SQL Injection sicher verwenden, bei der von MySQL muss man auf stored procedures (und die gab es früher gar nicht) ausweichen bzw. beten, dass das Escaping funktioniert. Also wo verstehe ich das Prinzip von C nicht, wenn ich der Meinung bin, dass die MySQL query function sch**** ist? Man sieht ja, wie man es hätte besser machen können, und bei PostgreSQL gab's diese Funktion auch nicht von Anfang an.



  • @john-0 @Mechanics Nicht jeder fucking thread braucht eine fucking Grundsatzdiskussion. C ist toll.



  • @Swordfish sagte in Rückgabe eines pointers auf array:

    @john-0 @Mechanics Nicht jeder fucking thread braucht eine fucking Grundsatzdiskussion. C ist toll.

    Nicht jeder Beitrag der dir nicht passt, muss von dir kommentiert werden, und wieder lässt du den Proll heraushängen.


Anmelden zum Antworten