|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6047
|
[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);
}
Grazie a tutti!
__________________
firma in progress |
|
|
|
|
|
#2 |
|
Senior Member
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 |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Puoi usare sprintf() oppure itoa() (che però non è standard). char testo[20]; int valore=13; sprintf (testo, "%d", valore);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#4 |
|
Senior Member
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] Codice:
testo = (char *) malloc(255*sizeof(char))
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6047
|
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 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6047
|
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:
Qualcuno ha idee in merito???
__________________
firma in progress |
|
|
|
|
|
|
#7 |
|
Senior Member
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 |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6047
|
Quote:
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_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 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:44.



















