PDA

Visualizza la versione completa : [C] Funzione che accetta ed elabora stringa come parametro


spinone
15-11-2007, 22:16
Ho una funzione a cui devo passare una stringa di caratteri

nome ( )
{
opera sulla stringa
.............

ritorna la stringa----
}


Che deve fare delle operazioni e ritornarmi un valore di una stringa

come mi consigliate di fare?

Come passo il valore dela stringa?

Come faccio a ritornare il valore? Devo usare un puntatore?

Scusate la domanda, ma sono all'inizio :master:

oregon
15-11-2007, 22:22
La stringa la passi tramite un puntatore ... non ho capito la questione della stringa restituita ... e' la stessa passata o un'altra?

Fai un esempio pratico ...

spinone
16-11-2007, 09:40
Due casi:

Primo:

devo passare una stringa e faendo una query SQL usando la stringa nome ottengo un intero.
Come faccio a passare la stringa?

char nome[300];

int query (char nome......)
{
faccio la query

return int;
}

Secondo:

char nome[300]; oppure char *nome

void query (char nome....)
{
faccio la query

modifico nome

}

ora il nome lo stesso modificato dalla funzione.


Come mi consigliate di passare i parametri per fare meno casino possibile?

oregon
16-11-2007, 09:47
Sempre per puntatore

int query(char *szNome)

void query(char *szNome)

spinone
16-11-2007, 10:11
e quand chiamo la funzione?

query (&*----)?

Grazie mille

oregon
16-11-2007, 10:21
query(nome)

... ti ricordo che in C il nome di un vettore e' il puntatore al suo primo elemento ...

spinone
17-11-2007, 00:05
HO visto in qualche funzione
query(&(*nome))

Questo ch significa?!?

oregon
17-11-2007, 00:25
Non significa altro che

query(nome)

in quanto l'operatore & e l'operatore * si annullano a vicenda ...

spinone
20-11-2007, 18:13
#include <stdio.h>

#include <string.h>

void get_name(char *name,char path[3000])
{
char temp[1000];
char carattere;
char *p;
int lunghezza, i, j=0;

strcpy(temp, path);
printf("temp: %s\n", temp);
lunghezza = strlen(temp);
printf("lunghezza :%i\n", lunghezza);
for (i=0; i < lunghezza; i++)
{
carattere = temp[i];
if (carattere=='/')
{
j++;
}
}
printf("numero di /: %i\n",j);

p = strtok(temp,"/");
printf("p: %s\n",p);
printf("temp: %s\n", temp);

for (i=0; i<j; i++)
{
strcpy(temp, p);
p = strtok(NULL, "/");
printf("%s\n", temp);
}
j=0;

/****************************
* qui devo mettere temp in name
*********************/

strcpy(name,temp);


printf("nome file dentro: %s\n", name);
}

/********************
* MAIN
********************/
main()
{
char *name=NULL;

get_name(name,"/home/prova/ciao.png");
printf("nome file fuori: %s\n", name);

}


Ho spezzato il nome del file tramite / e arrivo ad avere in temp il nome del file dal percorso.

come faccio a metterlo in name?

la variabile stringa che ho nel main?
la strcpy mi da segmentation fault.

spinone
20-11-2007, 18:15
$ gcc -o prova_stringa prova_stringa.c
$ ./prova_stringa
temp: /home/prova/ciao.png
lunghezza :20
numero di /: 3
p: home
temp: /home
home
prova
ciao.png
Segmentation fault

Questo l'output

Loading