Întoarcere un char * la o variabilă locală - te cu stejar prăbușit? Ce daruiti pentru sfat, perdanți?
alexrublev, în C nu se poate întoarce un pointer la o variabilă locală. Dacă trebuie să se întoarcă un șir de caractere, matrice, structura, bucata de spirit, fac un alt (există 2 opțiuni):
1) partea chemătoare alocă un buffer în memoria și transmite un indicator de funcție și lungimea acestuia. Funcția se umple cu date
2) Funcția alocă în mod dinamic o matrice pe heap prin noi și returnează un pointer la ea. E stupid calea, ca o singură funcție alocă memorie, alte comunicate sale și ușor pentru a obține confuz.
Poți întrebarea aici dacă vreau să aplice modul „neduratsky“, dar apelantul nu știe cât timp este nevoie de tamponul de a provoca? De exemplu, am o funcție
char * format (char * str.);
Cum pot razrulit altfel o astfel de situație „nu un prost“?
Cu stocul de preluare - nu este o opțiune. Nu știu cum va fi folosit, care poate urca până la un megabyte cap de linie otformatit nu interzice același lucru pentru mine.
> Poți întrebare aici dacă vreau să aplice modul „neduratsky“, dar apelantul nu știe cât timp este nevoie de tamponul de a provoca?
În general, o întrebare bună. Eu, sincer, confuz. Cred că, în mod neduratskim C, fără obiecte, și nu se poate face acest lucru fără cârje.
Dar, în C ++, Stroustrup glorie, cu ajutorul cârjelor și șabloane, aveți posibilitatea să atașați o numărare de referință, astfel încât tamponul alocat în funcția va fi eliberată în mod automat pe inutilitate. Asta este, vom trece într-o funcție sau un obiect gol myString myArray, iar funcția sa este populat cu date.
Care este profitul din transferul unui obiect container gol în funcția în loc de a crea în mod dinamic și revenirea dintr-o funcție? Faptul că poate trece un obiect local (plasat pe stivă) și a economisi timp CPU cu privire la alocarea mi-e-Lent de memorie dinamică.
Ha, și apoi există oameni care refuză să accepte beneficiile PLO și scrie C. Ei, mă întreb, astfel de probleme sunt rezolvate? Asigurați structuri de containere cu funcții?
> Poți întrebare aici dacă vreau să aplice modul „neduratsky“, dar apelantul nu știe cât timp este nevoie de tamponul de a provoca? De exemplu, am o funcție
char * format (char * str.);
În acest caz, utilizați dinamic stivă structura de tip, rândul său, etc.
> Ha, și apoi există oameni care refuză să accepte beneficiile PLO și scrie C. Ei, mă întreb, astfel de probleme sunt rezolvate? Asigurați structuri de containere cu funcții?
Încercați să poprogrammirovat controlere creiere și procesoare cu OEP