Path: csiph.com!aioe.org!.POSTED!not-for-mail From: guido84 Newsgroups: it.comp.os.linux.development Subject: Spreco di memoria e minaccia alla sicurezza Date: Mon, 12 Jun 2017 12:11:00 +0000 (UTC) Organization: Aioe.org NNTP Server Lines: 36 Message-ID: NNTP-Posting-Host: wbddthcu++T7LiUtG2OuyQ.user.gioia.aioe.org X-Complaints-To: abuse@aioe.org X-Notice: Filtered by postfilter v. 0.8.2 Xref: csiph.com it.comp.os.linux.development:65 In tutto il libro che seguo c'e' in continuazione: ..... char pippo[81]; ..... Esasperato dal doverlo scegliere prima, ho capito che potrei metterci un numero molto grande (es. 1000), ma qui su icol.dev mi e' stato detto di stare molto attento a quel che resta dopo '\0'. Allora ho fatto la prova con: char pippo[]; e immediatamente gcc m'ha dato un Warning dicendo che l'array veniva inteso di 1 solo carattere, pero' il programma funzionava perfettamente lo stesso. Allora astutissimamente gli ho messo: char pippo[1]; adesso niente Warning e funzionamento sempre perfetto, anche con stringhe lunghissime. La mia domanda e' questa. Visto che: - pippo[1] e' un puntatore all' INIZIO della stringa (lo dicono in altre pagine) - la fine e' IN OGNI CASO determinata da '\0' o da BLANK (e non dall'81) - l'indirizzo fisico del vettore non e' ancora determinato (viene fissato di volta in volta durante l'esecuzione?), allora dico: perche' mai nel libro che ho non fanno altro che scrivere in continuazione "char pippo[81];" ? Non sarebbe il caso di mettere SEMPRE "char pippo[1];" ? -- Saluti, Guido