Newsgroup: it.comp.lang.c++
Titolo: vettori stringhe e C

ciao
dichiarando char miaStringa[MAX];  per poter memorizzare 10 caratteri, 
il carattere '\0' viene trattato automaticamente dal compilatore, oppure 
devo esplicitamente riservargli un posto in questo modo miaStringa[MAX+1];
inoltre perchè questo script mi permette di inserire nell'array anche 
più di 10 caratteri?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10
int main()
{
     int lung;
     char miaStringa[MAX];
     scanf("%s",miaStringa);
     lung = strlen(miaStringa);
   printf("\nla stringa %s , e' lunga %d \n",miaStringa,lung);
   system("PAUSE");	
   return 0;
}
grazie

 più di 10 caratteri?
Perché il linguaggio C è pensato per alte prestazioni e dunque, se non 
glielo chiedi esplicitamente, non fa il controllo sull'overflow degli array.
E.

 più di 10 caratteri?
E' un puro caso: vai a scrivere oltre la memoria riservata per l'array ed 
è altamente probabile che il tuo programma dia un errore a runtime 
(buffer overrun). L'ho provato sul mio pc e effettivamente ciò accade.
D'altra parte in fase di compilazione non si può sapere quanto sarà lunga 
la stringa immessa e non è previsto nessun controllo di errori a runtime 
come è già stato detto.
Saluti
PS: essendo codice sorgente che deve essere compilato e non interpretato, 
non lo chiamerei "script".
Risaluti

 non lo chiamerei "script".
Perche' *deve* essere compilato e non interpretato?
-- 
-riko

 Perche' *deve* essere compilato e non interpretato?
Mi sono espresso male: è quanto accade di solito. E comunque sia non lo 
chiamerei script come non chiamerei il C un linguaggio di scripting 
(nonostante sia possibile usarlo come tale).

 (nonostante sia possibile usarlo come tale).
E sia anche una pessima idea farlo... :P
-- 
-riko

Enrico Franchi ha scritto:

L'uso del termine "script" non e' legato al fatto di essere compilato o 
interpretato. Solitamente una porzione di codice si chiama "script" se 
funziona all'interno di un'altra applicazione preesistente, come 
l'interprete di comandi del sistema operativo, un word processor, uno 
spreadsheet, un database manager, o un programma di CAD, mentre si 
chiama "programma" se tale codice costituisce una applicazione autonoma.
La differenza in realta' e' sfumata in quanto dipende dal ruolo che si 
vuol dare all'applicazione preesistente che viene programmata. Per 
esempio, se si considera che l'uso "normale" dell'interprete di comandi 
del sistema operativo sia quello interattivo, allora un file che 
contiene alcuni comandi per tale interprete puo' essere considerato uno 
"script" che automatizza alcuni comandi che altrimenti dovrebbero essere 
impartiti a mano. Analogo discorso vale per Microsoft Access.
Tuttavia ci sono molti sviluppatori di software che, dovendo sviluppare 
un'applicazione, scelgono di implementarla, in tutto o in parte, usando 
un interprete di comandi del sistema operativo, oppure codice VBA in 
Microsoft Access. In tal caso, si tratta in sostanza di veri programmi e 
non di semplici script, in quanto l'utente di tali programmi potrebbe 
non sapere nemmeno in che linguaggio sono stati implementati tali programmi.
-- 
Carlo Milanesi
http://digilander.libero.it/carlmila

 programmi.
Temo che la differenza sia così sfumata da non riuscire a capirla. Se lo 
script funziona dentro ad un'applicazione preesistente, intuitivamente 
direi che l'applicazione lo interpreta. Se il programma è invece 
autonomo, si presume che ci sia stato un processo di compilazione o 
qualcosa di molto simile.
Un programma può essere anche uno script, ma se ho qualcosa che compilo 
per ottenere un programma (eseguibile) io personalmente non lo chiamo 
script.

 script.
Quando si compila uno script, si ottiene o una DLL o un modulo di 
p-code, non un eseguibile autonomo, altrimenti si tratterebbe di un 
programma. Spesso tali moduli esterni, ottenuti compilando script, 
vengono chiamati "plug-in" o "stored procedure".
Questo e' almeno quello che mi pare essere l'uso corrente delle parole 
"programma" e "script".


script.
A voler fare proprio i pignoli bisognerebbe dire che neanche il
termine "eseguibile" è corretto. Un programma è per definizione
eseguibile, ma "programma" è anche del codice contenuto in uno shell
script o in una stored procedure, tanto per fare due esempi banali. La
confusione tra "compilato" e "interpretato" è dovuta al fatto che si
confonde l'atto di tradurre il codice, da quello di eseguirlo.
Compilare significa tradurre del codice da sorgente a una qualunque
forma di bytecode perché poi venga eseguito da una macchina (virtuale
o no). Generare codice direttamente eseguibile da un processore
specifico è un caso di compilazione.
-- 
maelström
http://apennacorrente.blogspot.com

 "programma" e "script".
Purtroppo no. Si vede un sacco di confusione: tipicamente si lega il
concetto di "script" all'implementazione del linguaggio (da cui
"linguaggio di scripting") cosa che io in genere contesto.
-- 
-riko