Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-04-2004, 21:25   #1
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
problema di esecuzione programma C

Ciao ragazzi, sto cercando di imparare a programmare in C e mi sono imbattuto in un problema.

Ho il seguente codice:

#include <stdio.h>;

char *string = "Zorro\n";

void main(void)
{
printf(string);
*(string+1) = 'a';
printf(string);
}


che nelle mie intenzioni scrive:

Zorro
Zarro

però quando lo esguo windows mi da errore dopo aver scritto:
Zorro

L'ho compilato e linkato con Visual C++
Sapreste dirmi se ho sbagliato io qualcosa o è colpa di windows?

Grazie a tutti
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2004, 00:39   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
Re: problema di esecuzione programma C

Quote:
Originariamente inviato da deggial
Ho il seguente codice:
Codice:
#include <stdio.h>;

char *string = "Zorro\n";

void main(void)
{
  printf(string);
  *(string+1) = 'a';
  printf(string);
}
che nelle mie intenzioni scrive:

Zorro
Zarro

però quando lo esguo windows mi da errore dopo aver scritto:
Zorro

L'ho compilato e linkato con Visual C++
Sapreste dirmi se ho sbagliato io qualcosa o è colpa di windows?

Grazie a tutti
La riga:
Codice:
char *string="Zorro\n";
dichiara string come un puntatore a una costante stringa.
Che, essendo costante, non può essere modificata, cosicché la riga:
Codice:
*(string+1)='a';
non può che dare errore.

Il modo più facile è usare un array di char:
Codice:
char string[] = "Zorro\n";
Il più elegante è allocare dinamicamente:
Codice:
char * string;
string=(char*)malloc(strlen("Zorro\n")+1);
strcpy(string,"Zorro\n");
ma in questo caso devi includere stdlib.h e chiamare free(string) prima di uscire dal programma.
A te la scelta.

Ah, a proposito: un paio di consigli:
1) la scrittura:
Codice:
printf(string);
è corretta, ma può dare comportamenti inattesi se string contiene il carattere '%'. L'espressione idiomatica è:
Codice:
printf("%s",string);
2) In C standard, main va dichiarata sempre come int, mai come void.
Il valore restituito da main dovrebbe essere 0 in caso di esecuzione terminata con successo, 1 in caso di esito non soddisfacente, 2 o più in caso di errori.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2004, 16:23   #3
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
grazie! ti avrei ringraziato prima ma ieri non mi funzionava la connessione ad internet.

mi rimane però qualche dubbio:

-se dichiaro string come un array perchè poi lo richiamo come se fosse un puntatore?

-perchè il compilatore non mi dava errori?

grazie anche per i consigli!
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2004, 17:07   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da deggial
-se dichiaro string come un array perchè poi lo richiamo come se fosse un puntatore?
Perché un array è...un puntatore al primo elemento.
Quote:
-perchè il compilatore non mi dava errori?
Perché formalmente non c'era nessun errore. E' compito tuo far sì che i puntatori puntino a zone di memoria "ammissibili".
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2004, 17:08   #5
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
Quote:
Originariamente inviato da deggial
-se dichiaro string come un array perchè poi lo richiamo come se fosse un puntatore?
Per le differenze tra array e puntatori, puoi leggere le comp.lang.c Frequently Asked Questions: la sezione 6 e' dedicata proprio a questo argomento.
(Scusa, ma e' una cosa un po' delicata, e che adesso non mi ricordo bene.)

Quote:
-perchè il compilatore non mi dava errori?
Perche' il programma, da un punto di vista sintattico, era comunque corretto.
Che poi faccia quello che vogliamo noi... beh, vedrai che e' tutto un altro discorso!
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2004, 17:22   #6
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
Quote:
Originariamente inviato da ilsensine
Perché un array è...un puntatore al primo elemento.
Uhm... non esattamente.
In essenza, un array e' una zona di memoria contigua con un nome, mentre un puntatore e' una variabile che contiene un indirizzo di memoria.
La sezione 6 delle comp.lang.c Frequently Asked Question ne parla estesamente.

Per inciso, dalle domande 6.2, 6.3, 6.8 e 6.9 di tale sezione mi sembra si possa dedurre che la tua affermazione sarebbe ineccepibile se fosse nella forma:
Quote:
Perché un array "è" un puntatore al primo elemento.
perche' allora interverrebbe la famigerata equivalenza tra puntatori e array.
(A proposito: leggiti la domanda 6.11 e impallidisci come sono impallidito io!)
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2004, 17:31   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Ziosilvio
Uhm... non esattamente.
Nella pratica, sì. L'unico vincolo è che il "puntatore" a un array non può essere modificato (anche se puoi usare l'algebra ecc.)

Quote:
(A proposito: leggiti la domanda 6.11 e impallidisci come sono impallidito io!)
Bella, non la sapevo
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2004, 21:44   #8
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
grazie ancora!
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Nuovi Samsung Galaxy S26 FE ora disponib...
EU Kids Act: una legge per riscrivere l'...
IonQ annuncia Superion 256, un computer ...
Tesla Semi arriva in Europa: fino a 500 ...
realme 16 Pro Harry Potter Edition &egra...
Siri potrebbe permettere di scegliere tr...
OpenAI acquisisce Glass Imaging per oltr...
Steam Deck 2: Valve non trova ancora il ...
Il CEO di Microsoft chiede una supervisi...
Dreame T15 Pro Heat, aspira la polvere e...
Apple rilascia iOS 27, iPadOS 27 e macOS...
DDRop, l'attacco hardware da meno di 200...
LG OLED G6 55'' a 1.368€ e LG NANO 98'' ...
OpenRGB 1.0 arriva dopo tre anni: una so...
OpenAI paga centinaia di revisori per le...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v