Newsgroup: it.comp.lang.c
Titolo: Funzioni che restituiscono stringhe

Salve a tutti,
il C è una novità per me, la mia esperienza in programmazione si basa
sull'Object Pascal, e per necessità didattiche mi ritrovo a dover fare
pratica con il C (i primi programmini in console). Mi chiedevo se fosse
possibile dichiarare funzioni che restituiscono stringhe, dato che se in
Delphi avrei fatto
    function Codifica(Input, Pass : String) : String;
in C ho provato qualcosa del tipo
    char codifica(char input[100], char output[100])[100];
ma il compilatore mi dice che il valore di ritorno non può essere un array
(cosa che avviene anche in Delphi ma non nel caso delle stringhe, semplici
array di caratteri...).
In tal caso come dovrei procedere?
Grazie anticipatamente,
Poochie©

     char codifica(char[100], char[100])[100];

 In tal caso come dovrei procedere?
...
Con un meccanismo che ti diventera' abituale programmando in C: ritorni 
la stringa attraverso un puntatore a carattere che punti alla prima 
componente dell' array di char che costituisce la stringa.
Giorgio

 Giorgio
Ehm, per un novizio un esempietto non sarebbe malissimo :)
Poochie©

 componente dell' array di char che costituisce la stringa.
occhio solo ad allocargli la memoria guori dalla funzione.. altrimenti...!

char *parola(char *p)
{
	char v[10]="pippo";
	strcpy(p,v);
	return p;
}
int main ()
{
	char b[10],*p;
	p=parola(b); /* p=   non è necessario, ma spesso le funzioni che 
gestiscono stringhe lo mettono.. come la strcpy.. ecc. */
}
peor' dovresti impararti prima arrey e puntatori...
se non sai bene cosa sono per adesso le stringhe non fanno x te!

...

Un consiglio: scordati quello che sai può solo esserti di ostacolo.
Trovati un buon libro e con tanta pazienza incomincia dalle cose piu'
semplici, e poi rimodificale per farle diventare un po' piu'
complicate, e così via fino alla noia. Comunque ritornando al discorso
di funzioni che trattano stringhe, vale quello che ti è stato detto
dagli altri. Le stringhe in C sono puntatori a char, percio' adesso il
tuo compito è capire come funzionano i puntatori.
Con una abusatissima battuta tratta da Matrix permettimi di dirti:
"Welcome to the real world!"

 }
Il valore ritornato da strcpy (e parenti) serve per poter fare cose di
questo tipo:
p = strcpy(foo(), "bla");
che, onestamente, trovo orribili ;)
Luca
-- 
Home: 
http://kronoz.cjb.net
"La teoria e` quando sappiamo come funzionano le cose ma non funzionano.
 La pratica e` quando le cose funzionano ma non sappiamo perche`.
 Abbiamo unito la teoria e la pratica: le cose non funzionano piu` e non
 sappiamo il perche`." -- A. Einstein

Grazie a tutti, mi metto al lavoro!
Poochie©

Ho provato a fare quasta modifica, ma già sorge un problema:
#include "stdafx.h"
#include "string.h"
char *parola(char *p)
{
char v[10]="pippo";
printf("%s\n",p);
strcpy(p,v);
printf("%s\n",p);
return p;
}
int main ()
{
char b[]="gatto",*p;
p = parola(b); /* p=   non è necessario, ma spesso le funzioni che
gestiscono stringhe lo mettono.. come la strcpy.. ecc. */
printf("%s",p);
}
Con questo codice mi aspetterei di vedere:
gatto
gattomiao
gattomiao
ma il risultato è:
gatto
miao
miao
strcpy pare non funzionare, come mai?
Poochie©

Solita correzione causa fretta: sostituite "pippo" a "miao"...
Poochie©

 strcpy pare non funzionare, come mai?
cpy  ->  sta  per  "copy". Copia la  seconda  stringa  sulla  prima. Per
concatenare due stringhe devi usare  strcat (meglio strncat, cosi` eviti
di sforare):
STRCAT(3)           Linux Programmer's Manual           STRCAT(3)
NAME
       strcat, strncat - concatenate two strings
SYNOPSIS
       #include <string.h>
       char *strcat(char *dest, const char *src);
       char *strncat(char *dest, const char *src, size_t n);
DESCRIPTION
       The strcat() function appends the src string to the dest string
       overwriting the `\0' character at the end of
       dest, and then adds a terminating `\0' character.  The strings
       may not overlap, and  the  dest  string  must
       have enough space for the result.
       The strncat() function is similar, except that only the first n
       characters of src are appended to dest.
RETURN VALUE
       The strcat() and strncat() functions return a pointer to the
       resulting string dest.
CONFORMING TO
       SVID 3, POSIX, BSD 4.3, ISO 9899
SEE ALSO
       bcopy(3), memccpy(3), memcpy(3), strcpy(3), strncpy(3)
GNU                         1993-04-11                          1
Luca
-- 
Home: 
http://kronoz.cjb.net
"New processes are created by other processes, just like new
 humans. New humans are created by other humans, of course,
 not by processes." -- Unix System Administration Handbook

Ops, effettivamente ho fatto un qui pro quo abbastanza scandaloso, grazie
del supporto!
Poochie©