Richiamo di una funzione puntatore in C

di il
10 risposte

Richiamo di una funzione puntatore in C

Salve, come posso richiamare una funzione che restituisce un puntatore nel main? cioè, ho questa funzione:

char *maiuscolo(char *stringa){
	//codice a caso
}
come la richiamo nel main? qual è la sintassi?
Normalmente metterei:

maiuscolo=(stringa);
ma non funziona con l'asterisco avanti a maiuscolo :(, quindi restituendo un puntatore dalla funzione(?)

10 Risposte

  • Re: Richiamo di una funzione puntatore in C

    
    #include<stdio.h>
    
    char *hello(void){
        return "Ciao!";
    }
    
    int main() {
        char *str = hello();
        printf("%s", str);
        return 0;
    }
    
  • Re: Richiamo di una funzione puntatore in C

    Weierstrass ha scritto:


    
    #include<stdio.h>
    
    char *hello(void){
        return "Ciao!";
    }
    
    int main() {
        char *str = hello();
        printf("%s", str);
        return 0;
    }
    
    ah, quindi dovrebbe andar bene come ho scritto io no? cioè:
    
    maiuscolo=(stringa);
    
  • Re: Richiamo di una funzione puntatore in C

    Se vuoi passarlo come return value, metti void nel prototipo dentro le parentesi della funzione
    
    stringa = maiuscolo();
    
    Hai scelto il libro?
  • Re: Richiamo di una funzione puntatore in C

    Weierstrass ha scritto:


    Se vuoi passarlo come return value, metti void nel prototipo dentro le parentesi della funzione
    
    stringa = maiuscolo();
    
    Hai scelto il libro?
    non ho capito :(. Ora ti faccio vedere il codice completo aspe
    #include<stdio.h>
    #include<string.h>
    #define N 100
    
    char *maiuscolo(char *stringa);
    
    int main(){
    	char *stringa;
    	char a[N];
    	
    	puts("Inserisci una frase o una parola: ");
    	stringa= &a[0];
    	gets(stringa);
    	printf("\n");
    	puts(stringa);
    	
    	maiuscolo(stringa);         //ho provato a mettere come mi hai detto tu qui, ma non va :(
    }
    
    char *maiuscolo(char *stringa){
    	
    	printf("La nuova stringa e': %s ", toupper(stringa));
    }
    e di che libro parli?
  • Re: Richiamo di una funzione puntatore in C

    Weierstrass ha scritto:


    Se vuoi passarlo come return value, metti void nel prototipo dentro le parentesi della funzione
    
    stringa = maiuscolo();
    
    Hai scelto il libro?
    non ho capito :(. Ora ti faccio vedere il codice completo aspe
    #include<stdio.h>
    #include<string.h>
    #define N 100
    
    char *maiuscolo(char *stringa);
    
    int main(){
    	char *stringa;
    	char a[N];
    	
    	puts("Inserisci una frase o una parola: ");
    	stringa= &a[0];
    	gets(stringa);
    	printf("\n");
    	puts(stringa);
    	
    	maiuscolo(stringa);         //ho provato a mettere come mi hai detto tu qui, ma non va :(
    }
    
    char *maiuscolo(char *stringa){
    	
    	printf("La nuova stringa e': %s ", toupper(stringa));
    }
    e di che libro parli?
  • Re: Richiamo di una funzione puntatore in C

    
    #include<stdio.h>
    #include<stdlib.h>
    #include<ctype.h>
    #define N 100
    
    char *maiuscolo(char *stringa);
    
    int main(){
    	char a[N], *b;
    	puts("Una frase o una parola: ");
    	fgets(a, N, stdin);
    	printf("\n");
    	b = maiuscolo(a);
            printf("La nuova stringa: %s", b);
    	return 0;
    }
    
    char *maiuscolo(char *stringa){
    	char *s = malloc(N);
    	for(int i=0; i<N; i++)
    	    s[i] = toupper(stringa[i]);
    	return s;
    }
    
    Il libro dove stanno scritte tutte queste cose
  • Re: Richiamo di una funzione puntatore in C

    Weierstrass ha scritto:


    
    #include<stdio.h>
    #include<stdlib.h>
    #include<ctype.h>
    #define N 100
    
    char *maiuscolo(char *stringa);
    
    int main(){
    	char a[N], *b;
    	puts("Una frase o una parola: ");
    	fgets(a, N, stdin);
    	printf("\n");
    	b = maiuscolo(a);
            printf("La nuova stringa: %s", b);
    	return 0;
    }
    
    char *maiuscolo(char *stringa){
    	char *s = malloc(N);
    	for(int i=0; i<N; i++)
    	    s[i] = toupper(stringa[i]);
    	return s;
    }
    
    Il libro dove stanno scritte tutte queste cose
    ancora non faccio l'allocazione dinamica :((, non c'è modo di farlo senza?
    e si ho, sto studiando queste cose anche da un libro sperando di capirci di più ahha, oltre al libro vedo cose online, perché?
  • Re: Richiamo di una funzione puntatore in C

    Senza allocazione dinamica devi fare così
    
    #include<stdio.h>
    #include<ctype.h>
    #define N 100
    
    void maiuscolo(char *stringa, char *out);
    
    int main(){
    	char a[N], b[N];
    	puts("Una frase o una parola: ");
    	fgets(a, N, stdin);
    	printf("\n");
    	maiuscolo(a, b);
            printf("La nuova stringa: %s", b);
    	return 0;
    }
    
    void maiuscolo(char *stringa, char *out){
    	for(int i=0; i<N; i++)
    	    out[i] = toupper(stringa[i]);
    }
    
  • Re: Richiamo di una funzione puntatore in C

    Weierstrass ha scritto:


    Senza allocazione dinamica devi fare così
    
    #include<stdio.h>
    #include<ctype.h>
    #define N 100
    
    void maiuscolo(char *stringa, char *out);
    
    int main(){
    	char a[N], b[N];
    	puts("Una frase o una parola: ");
    	fgets(a, N, stdin);
    	printf("\n");
    	maiuscolo(a, b);
            printf("La nuova stringa: %s", b);
    	return 0;
    }
    
    void maiuscolo(char *stringa, char *out){
    	for(int i=0; i<N; i++)
    	    out[i] = toupper(stringa[i]);
    }
    
    ah okok, grazie. Ma il vero problema è che la mia traccia mi chiede di fare una funzione in questo modo :
    char *maiuscolo(char *stringa)
    per questo ho chiesto come poterlo richiamare nel main, non ho mai usato funzioni che fossero dei puntatori :(
  • Re: Richiamo di una funzione puntatore in C

    Ti serve l'allocazione dinamica, altrimenti l'oggetto è perso appena esci dalla funzione.
    Potresti modificare la stringa stessa di partenza
    
    #include<stdio.h>
    #include<ctype.h>
    #define N 100
    
    char *maiuscolo(char *stringa);
    
    int main(){
    	char a[N], *b;
    	puts("Una frase o una parola: ");
    	fgets(a, N, stdin);
    	printf("\n");
    	b = maiuscolo(a);
            printf("La nuova stringa: %s", b);
    	return 0;
    }
    
    char *maiuscolo(char *stringa){
    	for(int i=0; i<N; i++)
    	    stringa[i] = toupper(stringa[i]);
    	return stringa;
    }
    
    Ma sarebbe una soluzione impropria e il return value sarebbe inutile.
    Potresti usare variabili globali, ma sarebbe una soluzione impropria anche quella, perché faresti delle operazioni logicamente appartenenti a una funzione che in realtà stanno fuori
Devi accedere o registrarti per scrivere nel forum
10 risposte