PDA

View Full Version : [C]problema con funzione strcpy!!!..help...


Piojolopez2406
10-05-2007, 18:18
Salve ragazzi sto avendo un problem con l'uso della strcpy, ho questo programmino ke mi deve trovare l'occorrenza di una sottostringa di 3 lettere in una stringa e sostituirmi queste rtre lettere con tre XXX, lo compilo e non mi segnala errori , ma al momento di avviarlo mi da un problema...asetto consgigli grazie


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

void main ()
{
char *Pstringa="nel mezzo del cammin di nostra vita\n"
"mi ritrovai per una selva oscura\n"
"la cui diritta via era smarrita\n";
char *Psottostringa="ita";
char *Nuova="XXX";
int MAX;
int it=0;
printf("%s",Pstringa);
MAX=strlen(Pstringa);
while(it<MAX)
{
if(Pstringa[it]==Psottostringa[0])
if(Pstringa[it+1]==Psottostringa[1])
if(Pstringa[it+2]==Psottostringa[2])
{
strcpy(&Pstringa[0],Nuova);
//Pstringa[it+1]=Nuova[1];
//Pstringa[it+2]=Nuova[2];
}
it++;
}
printf("%s",Pstringa);
system("pause");
}

andbin
10-05-2007, 19:37
Salve ragazzi sto avendo un problem con l'uso della strcpy, ho questo programmino ke mi deve trovare l'occorrenza di una sottostringa di 3 lettere in una stringa e sostituirmi queste rtre lettere con tre XXX, lo compilo e non mi segnala errori , ma al momento di avviarlo mi da un problema...


char *Pstringa="nel mezzo del cammin di nostra vita\n"
"mi ritrovai per una selva oscura\n"
"la cui diritta via era smarrita\n";
A Pstringa viene assegnato l'indirizzo di una stringa "literal". Una stringa letterale è memorizzata in una area di memoria particolare dove risiedono tutte le stringhe costanti e in genere (ma dipende dal compilatore e anche dalla modalità di compilazione debug/release e magari da opzioni di compilazione), tale area è "read-only".
Per tale motivo, andare a scrivere su una stringa literal è una cosa da non fare perché può causare un segmentation fault.

Copia la stringa in un'area di memoria allocata dinamicamente o dichiara la stringa come array di char: char str[]=".....";

Piojolopez2406
10-05-2007, 23:55
ho capito ma nel mio caso devo fare come ho scritto, perciò mi sn impallato....te ke mi consigli?

recoil
11-05-2007, 08:05
confermo quanto ti è stato già detto
come mai devi fare tassativamente in quel modo?
non puoi mettere char Pstringa[] ?

Piojolopez2406
11-05-2007, 13:38
ho capito lo so benissimo ke è consigliabile fare così...ma ti ripeto io devo dikiarare in modo dinamico la stringa e non in modo statico...

andbin
11-05-2007, 13:43
ho capito lo so benissimo ke è consigliabile fare così...ma ti ripeto io devo dikiarare in modo dinamico la stringa e non in modo statico...Non ha senso dire "dichiarare in modo dinamico la stringa" ..... o dichiari un puntatore o un array.

Se per qualche (oscuro) motivo puoi solamente dichiarare un puntatore, allora alloca memoria, copia la stringa e lavora sulla copia.

Piojolopez2406
11-05-2007, 13:47
scusa hai ragione....vabbè mi sn espresso male....cmq...facendo come hai detto tu in che modo posso ottenere il risultato finale...facendo funzionare anke la strcpy

andbin
11-05-2007, 14:02
scusa hai ragione....vabbè mi sn espresso male....cmq...facendo come hai detto tu in che modo posso ottenere il risultato finale...facendo funzionare anke la strcpyAlloca memoria con malloc, copia la stringa literal nel blocco di memoria e lavora sulla copia.

Nota bene: nel post iniziale vai a cercare una sottostringa e quando la trovi, la sostituisci usando strcpy. Come è già stato detto, strcpy copia anche il nullo, pertanto se la sottostringa ce l'hai nel mezzo, ti ritrovi alla fine con la stringa troncata.

Piojolopez2406
11-05-2007, 14:15
perdonami quindi cosa dovrei dikiarare mi fai capire la linea di codidce ke nn ho ben inteso....grazie

andbin
11-05-2007, 14:20
perdonami quindi cosa dovrei dikiarare mi fai capire la linea di codidce ke nn ho ben inteso....grazieMa ti è già stato spiegato in <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1469769) thread! Determina la lunghezza della stringa literal, alloca memoria (il solito lunghezza+1) e copia la stringa con strcpy.