PROBLEMA Conversione di una stringa in codice ASCII

markice92

Nuovo Utente
45
0
Ciao ragazzi ho un piccolo problema con un programmino, in pratica devo far inserire una stringa all'utente e poi ristamparla normale ed in codice ASCII. Il programma compila solo che stampa male in ASCII. Vi metto il codice:

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
char stringa[] = '';

printf( "Inserisci una stringa\n" );
scanf( "%s", stringa );

printf( "%s\n", stringa );
printf( "%s\n", (int)stringa );
}

Dov'è l'errore??
 

sLN

Nuovo Utente
59
5
CPU
Intel i5 4670@3.40GHz
Scheda Madre
AsRock h87 Pro4
HDD
WD Caviar Blue 1TB
RAM
Ballistix Sport XT 2x4 GB 1600 MHz CL9
GPU
Sapphire r9 270x
Audio
Integrata Realtek ALC892
Monitor
Asus VG248QE 144Hz
PSU
CM b600 600W
Case
Aerocool GT Advance White
OS
Windows 7 64bit / Ubuntu 14.04 LTS
#include <stdio.h>
#include <stdlib.h>


int main( void )
{
char stringa[10];
int conta;


printf( "Inserisci una stringa\n" );
scanf( "%s", stringa );


printf( "%s\n", stringa );
do{
printf ("%d ",stringa[conta]);
conta++;
}while (stringa[conta]!='\0');
}

Allora quando vuoi visualizzare il valore intero di ogni carattere(ascii) devi prendere la stringa e visualizzare l'ascii di ogni carattere con un ciclo utilizzando la specifica di conversione %d. Come ben sai ogni volta che viene registrato qualcosa all'interno di una stringa essa finisce con un carattere nullo alla fine che è '\0'. Cioè in pratica se io scrivo ciao la stringa è stringa[]="ciao" che suddivisa in caratteri è stringa[]={'c','i','a','o','\0'}
 

markice92

Nuovo Utente
45
0
#include <stdio.h>
#include <stdlib.h>


int main( void )
{
char stringa[10];
int conta;


printf( "Inserisci una stringa\n" );
scanf( "%s", stringa );


printf( "%s\n", stringa );
do{
printf ("%d ",stringa[conta]);
conta++;
}while (stringa[conta]!='\0');
}

Allora quando vuoi visualizzare il valore intero di ogni carattere(ascii) devi prendere la stringa e visualizzare l'ascii di ogni carattere con un ciclo utilizzando la specifica di conversione %d. Come ben sai ogni volta che viene registrato qualcosa all'interno di una stringa essa finisce con un carattere nullo alla fine che è '\0'. Cioè in pratica se io scrivo ciao la stringa è stringa[]="ciao" che suddivisa in caratteri è stringa[]={'c','i','a','o','\0'}

Quando lo eseguo mi stampa due volte la stringa "ciao" che è quella che ho inserito e poi mi da "errore di segmentazione (core dump creato)"
 

sLN

Nuovo Utente
59
5
CPU
Intel i5 4670@3.40GHz
Scheda Madre
AsRock h87 Pro4
HDD
WD Caviar Blue 1TB
RAM
Ballistix Sport XT 2x4 GB 1600 MHz CL9
GPU
Sapphire r9 270x
Audio
Integrata Realtek ALC892
Monitor
Asus VG248QE 144Hz
PSU
CM b600 600W
Case
Aerocool GT Advance White
OS
Windows 7 64bit / Ubuntu 14.04 LTS
mmm non so perchè ti dia errore ho provato lo stesso codice su dev-c++, su geany e a riga di comando e funge... prova a mettere return 0; dato che sei in int, ma non dovrebbe essere quello il problema
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Quando lo eseguo mi stampa due volte la stringa "ciao" che è quella che ho inserito e poi mi da "errore di segmentazione (core dump creato)"
'conta' è dichiarato ma non inizializzato quindi assumerà un valore indefinito.
 
  • Mi piace
Reazioni: sLN

markice92

Nuovo Utente
45
0
'conta' è dichiarato ma non inizializzato quindi assumerà un valore indefinito.

Ho riscritto il codice con un ciclo for ma non mi converte in ASCII, mi stampa due volte la stringa normale.

#include
<stdio.h>
#include <stdlib.h>

int main( void )
{
char stringa[] = "";
int conta;

printf( "Inserisci una stringa\n" );
scanf( "%s", stringa );

printf( "%s\n", stringa );

for ( conta = 0; conta != '\0'; ++conta ) {
printf( "%d\n", (int)stringa[conta] );
}

}
 

sLN

Nuovo Utente
59
5
CPU
Intel i5 4670@3.40GHz
Scheda Madre
AsRock h87 Pro4
HDD
WD Caviar Blue 1TB
RAM
Ballistix Sport XT 2x4 GB 1600 MHz CL9
GPU
Sapphire r9 270x
Audio
Integrata Realtek ALC892
Monitor
Asus VG248QE 144Hz
PSU
CM b600 600W
Case
Aerocool GT Advance White
OS
Windows 7 64bit / Ubuntu 14.04 LTS
non ti converte in ASCII, primo perché la stringa la deve inserire l'utente quindi tu in char stringa[]=""; devi levare le virgolette,l'uguale e devi ficcare un numero all'interno delle parentesi quadre e secondo perché hai scritto male il for
Da:
for ( conta = 0; conta != '\0'; ++conta )
a: for ( conta = 0; stringa[conta] != '\0'; ++conta )
perché conta viene usato solo come indice del vettore mentre è stringa a contenere il carattere, quindi di conseguenza quando va a cercare il carattere /0 lo cercherà qui --->stringa<---[conta]
 

markice92

Nuovo Utente
45
0
non ti converte in ASCII, primo perché la stringa la deve inserire l'utente quindi tu in char stringa[]=""; devi levare le virgolette,l'uguale e devi ficcare un numero all'interno delle parentesi quadre e secondo perché hai scritto male il for
Da:
for ( conta = 0; conta != '\0'; ++conta )
a: for ( conta = 0; stringa[conta] != '\0'; ++conta )
perché conta viene usato solo come indice del vettore mentre è stringa a contenere il carattere, quindi di conseguenza quando va a cercare il carattere /0 lo cercherà qui --->stringa<---[conta]

Ok adesso converte corretamente in ASCII. Solo che se la stringa la imposto con l'indice tra parentesi non posso scrivere stringhe che superino quello spazio ed io voglio che l'utente possa inserire stringhe di qualsiasi dimensione... E poi non capisco perchè mi stampa per due volte la stringa che inserisco
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Ok adesso converte corretamente in ASCII. Solo che se la stringa la imposto con l'indice tra parentesi non posso scrivere stringhe che superino quello spazio ed io voglio che l'utente possa inserire stringhe di qualsiasi dimensione... E poi non capisco perchè mi stampa per due volte la stringa che inserisco
Crea un buffer più ampio e.g. 512 o 1024. Altrimenti, la procedura è più complessa e richiede l'uso di allocazione dinamica.
Posta il codice, possibilmente tra i tag
Codice:
per dare formattazione.
 

sLN

Nuovo Utente
59
5
CPU
Intel i5 4670@3.40GHz
Scheda Madre
AsRock h87 Pro4
HDD
WD Caviar Blue 1TB
RAM
Ballistix Sport XT 2x4 GB 1600 MHz CL9
GPU
Sapphire r9 270x
Audio
Integrata Realtek ALC892
Monitor
Asus VG248QE 144Hz
PSU
CM b600 600W
Case
Aerocool GT Advance White
OS
Windows 7 64bit / Ubuntu 14.04 LTS
in pratica devo far inserire una stringa all'utente e poi ristamparla normale ed in codice ASCII


la prima che visualizzi è quella che hai inserito e la seconda è quella che chiedevi tu cioè
Inserisci una stringa:
ciao (quello che hai inserito)
ciao (stampa normale)
99......(stampa ASCII)
 

markice92

Nuovo Utente
45
0
la prima che visualizzi è quella che hai inserito e la seconda è quella che chiedevi tu cioè
Inserisci una stringa:
ciao (quello che hai inserito)
ciao (stampa normale)
99......(stampa ASCII)

Si giusto, scusate ragazzi ma questi giorni sono un po' rincoglionito :D Grazie a tutti per le risposte!
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili