Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
La nuova Insta360 X6 introduce sensori Sony da 1/1.1" e un SoC Triple AI a 4nm. Analizziamo le riprese 8K, il primo Dolby Vision nativo a 10-bit nel settore sferico e l'innovativo flusso di lavoro diretto sulla futura versione 22 di DaVinci Resolve.
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Dopo due settimane trascorse al volante della Dacia Spring 2026 possiamo raccontarvi tutto, dalle novità di motore e batteria, fino ai consumi in tutti le situazioni, compresa l'autonomia reale ad alta velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-01-2007, 16:30   #1
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
[C] Errore di segmentation fault

Ciao a tutti. Ho un piccolo (spero) problema con il C.

Ammetto di essere un pelo ignorante con stringhe e puntatori (e ho pure la presunzione di usare il C senza conoscere a fondo il magico mondo dei puntatori!), comunque nella porzione di codice sotto mi da un errore di segmentation fault:

Codice:
#include <iostream>

int main()
{
    const char *testo;
    int lun;
    int valore=13;

    testo=(char *) valore;
    lun=strlen (testo);
}
Qualcuno mi può aiutare e spiegare il perchè? Intuisco che c'è qualcosa che non va nella stringa testo, ma non capisco come mettere a posto.

Grazie a tutti!
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:19   #2
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
int valore=13;
testo=(char *) valore;

non ha senso in c, per quel che mi risulta.

Dallo strlen mi sembra di capire che tu stia cercando di convertire l'intero 13 in una stringa e salvarla nella variabile testo, per cui il codice corretto con i puntatori sarebbe:

#include <stdlib.h>
#include <string.h>

main()
{
char* testo;
int lun;
testo=(char*)malloc(MAX_LUNGH_STRINGA*sizeof(char)); //ricordate sempre di allocare memoria coi puntatori a stringhe !
itoa(13,testo,10); //conversione intero->stringa
printf("%s",testo);
lun=strlen (testo);
}
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:20   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da deggial
Codice:
#include <iostream>

int main()
{
    const char *testo;
    int lun;
    int valore=13;

    testo=(char *) valore;
    lun=strlen (testo);
}
Non puoi fare una conversione da un valore numerico ad una stringa con un cast (e nemmeno il contrario, ovviamente)!

Puoi usare sprintf() oppure itoa() (che però non è standard).

char testo[20];
int valore=13;
sprintf (testo, "%d", valore);
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:22   #4
Gandalf_BD
Senior Member
 
L'Avatar di Gandalf_BD
 
Iscritto dal: Jun 2004
Messaggi: 760
EDIT: ti hanno appena risposto già gli altri

infatti... la stringa testo va allocata... come hai fatto tu, qualche volta fuonziona e qualche volta no, ma se funziona lo fa per puro caso...
puoi dichiarare testo così:
Codice:
char testo[255]
oppure allocarlo in seguito così:
Codice:
testo = (char *) malloc(255*sizeof(char))
e poi, ma di questo non sono sicuro al 100%, non penso che la tua conversione da int a char con un semplice cast vada bene, ma di questo al momento non sono proprio sicuro...
__________________
Gandalf_BD
--------------------------------------------
"When you aim at perfection, you discover it's a moving target"
Gandalf_BD è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:52   #5
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
Grazie, da quel che ho capito da voi (e dagli sbattimenti di oggi pomeriggio) ho capito che l'errore dovrebbe stare nel non aver allocato la memoria per la variabile testo.
Ora non sono in ufficio, e devo convincermi che NON voglio lavorare stasera, quindi proverò domattina a sistemare.

Sul fatto che non si possa convertire con un semplice cast, l'ho letto (o almeno immagino di averlo letto) su un libro (anche abbastanza autorevole che io sappia: Bellini, Guidi - Linguaggio C. Guida alla programmazione)...
Domani controllerò, magari sono io che ho interpretato in modo fantasioso qualche frase ambigua che era presente.
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2007, 09:33   #6
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
Grazie per le risposte, ma non si risolve comunque il problema...
A me serve che testo sia definito come const char, perchè poi devo utilizzarlo in una PQexecParam.

L'esempio che vi ho postato è molto semplificato, in realtà testo è un array di 11 stringhe, e PQexecParam è definita come segue:

Quote:
PGresult *PQexecParams(PGconn *conn,
const char *command,
int nParams,
const Oid *paramTypes,
const char * const *paramValues,
const int *paramLengths,
const int *paramFormats,
int resultFormat);

If parameters are used, they are referred to in the command string as $1, $2, etc. nParams is the number of parameters supplied; it is the length of the arrays paramTypes[], paramValues[], paramLengths[], and paramFormats[]. (The array pointers may be NULL when nParams is zero.) paramTypes[] specifies, by OID, the data types to be assigned to the parameter symbols. If paramTypes is NULL, or any particular element in the array is zero, the server assigns a data type to the parameter symbol in the same way it would do for an untyped literal string. paramValues[] specifies the actual values of the parameters. A null pointer in this array means the corresponding parameter is null; otherwise the pointer points to a zero-terminated text string (for text format) or binary data in the format expected by the server (for binary format). paramLengths[] specifies the actual data lengths of binary-format parameters. It is ignored for null parameters and text-format parameters. The array pointer may be null when there are no binary parameters. paramFormats[] specifies whether parameters are text (put a zero in the array) or binary (put a one in the array). If the array pointer is null then all parameters are presumed to be text. resultFormat is zero to obtain results in text format, or one to obtain results in binary format. (There is not currently a provision to obtain different result columns in different formats, although that is possible in the underlying protocol.)
Mi serve calcolare la lunghezza dei vari elementi di testo per specificarli in paramLengths[]

Qualcuno ha idee in merito???
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2007, 10:46   #7
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Cosa devi passare a quella funzione, solo le lunghezze o anche le singole stringhe di testo? Te lo chiedo perchè la funzione non accetta array di stringhe in input, solo semplici stringhe. Probabilmente usi qualche accrocchio per spezzettare una stringa in più stringhe (e probabilmente per far questo usi proprio l'array delle lunghezze delle singole stringhe)
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2007, 13:03   #8
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
Quote:
Originariamente inviato da yorkeiser
Cosa devi passare a quella funzione, solo le lunghezze o anche le singole stringhe di testo? Te lo chiedo perchè la funzione non accetta array di stringhe in input, solo semplici stringhe. Probabilmente usi qualche accrocchio per spezzettare una stringa in più stringhe (e probabilmente per far questo usi proprio l'array delle lunghezze delle singole stringhe)
Alla funzione passo questo:
Codice:
    
ris_insert = PQexecParams(conn,
            "INSERT INTO tab1 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)",
            11,
            NULL,
            param,
            param_length,
            param_formats,
            0);
param è un array di 11 stringhe
param_length DOVREBBE essere un array di 11 lunghezze (le lunghezze delle stringhe appunto)
param_formats è un array di 11 "1" che indica che i dati che inserisco sono binari
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
AORUS GeForce RTX 5080 INFINITY WOOD 16G: una scheda video diversa dalle altre AORUS GeForce RTX 5080 INFINITY WOOD 16G: una sc...
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
L'IA non rende tutte le imprese uguali. ...
Netflix cambia la strategia sul gaming: ...
Hyundai Kona elettrica: è ancora ...
Vogliono costruire un monumento per Elon...
Ring Intercom Audio crolla a 39,99€ su A...
La Francia blocca il divieto dei social ...
Trump citato in giudizio: chiesto lo sto...
PEC obbligatoria per revisione e passagg...
Il ripulitore di watermark Claude da 4.5...
Xiaomi 17 Ultra scambia il Sole per la L...
È arrivata la migliore e-bike Eng...
Apple Mac mini M4, ecco perché conviene ...
Robot aspirapolvere in offerta su Amazon...
Il nuovo pick-up elettrico di Ford &egra...
Google Pixel 11 arriva su Amazon: preord...
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: 09:05.


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