RISOLTO Uso dei puntatori in C

Pubblicità

dalca

Nuovo Utente
Messaggi
14
Reazioni
2
Punteggio
3
Buonasera e Buon Natale a tutti.
Sto facendo per esercizio un programma in C che, data una stringa in ingresso, me la inverte. Il tutto usando i puntatori.
Il listato che ho fatto è il seguente:
C:
#include <stdio.h>
#include <string.h>

#define MAXDIM 10

int main(void) {
    char parola[MAXDIM], inversa[MAXDIM], *p = parola, *t = inversa;
    int lunghezza;
    
    printf("\nInserisci una parola: ");
    fgets(parola, sizeof(parola), stdin);
    parola[strcspn(parola, "\n")] = '\0';

    lunghezza = strlen(parola);

    for(p = parola + lunghezza - 1; p >= parola; p--) {
        *t = *p;
        t++;
    }

    printf("\nLa parola inserita è: %s", parola);
    printf("\n\nLa parola inversa è: %s", inversa);
        
}

Il problema e che alla stringa inversa mi accoda dei caratteri spuri che non so come eliminare.
Un esempio di output è il seguente:
Codice:
Inserisci una parola: prova

La parola inserita è: prova

La parola inversa è: avorp��

Come potete vedere nella parola inversa ci sono due caratteri in più.
Qualcuno mi sa suggerire come fare in modo che non ci siano?

Grazie.
 
Discussioni/messaggi multipli
Buongiorno a tutti,
devo fare un programma in C che concateni due stringhe: la seconda stringa deve essere concatenata alla prima usando i puntatori.
Ho scritto il seguente programma:

C:
#include <stdio.h>
#include <string.h>

#define MAXDIM 100

int main(void) {
    char parola1[MAXDIM], parola2[MAXDIM], *p1 = parola1, *p2 = parola2;
    int lunghezza1, lunghezza2;
    
    do {
        printf("\nInserisci la prima parola: ");
        fgets(parola1, sizeof(parola1), stdin);
        parola1[strcspn(parola1, "\n")] = '\0';
        lunghezza1 = strlen(parola1);
    }
    while(lunghezza1 > 50);
    
    do {
        printf("\nInserisci la seconda parola: ");
        fgets(parola2, sizeof(parola2), stdin);
        parola1[strcspn(parola2, "\n")] = '\0';
        lunghezza2 = strlen(parola2);
    }
    while(lunghezza2 > 50);
    
    for(p1 = parola1 + lunghezza1, p2 = parola2; p1 < parola1 + lunghezza1 + lunghezza2 && p2 < parola2 + lunghezza2; p1++ , p2++) {
        *p1 = *p2;
    }
    parola1[lunghezza1 + lunghezza2] = '\0';
    
    printf("\nLa parola risultante è: %s.", parola1);
    
}

Il problema è che se la prima stringa è più corta della seconda tutto funziona mentre se la prima stringa è più lunga della seconda vengono stampati tanti caratteri quante sono le lettere della seconda stringa.
Non riesco ad uscire da questa situazione. Qualcuno ha qualche suggerimento per risolvere?

Grazie
 
Occhio perché noto più problemi. Da PC ti potrei rispondere meglio.

Comunque, il primo problema è che non è già portabile quello che fai nella ricerca del carattere \n.
Linux usa \n, Windows usa \r\n, Mac solo \r.

Nel secondo while usi ancora l'array parola1, non mi sembra corretto. Probabilmente questo è il malfunzionamento.

Non so perché non usi però strcpy, se ciò che devi fare è reimplementare la concatenazione. Sempre se non sei costretto a non usare funzioni built-in, ma non penso sia il caso.

Ah, occhio perché in caso di due stringhe di 50 caratteri non hai spazio per il carattere terminatore.
 
Grazie per la risposta e i consigli DisparchCode, effettivamente l'errore era nell'uso di parola1 nel secondo while.
Non ho usato strcpy perché è un esercizio sull'uso dei puntatori.

Grazie ancora.
 
Un consiglio: non appesantire il codice con l'input da tastiera.
Se lo scopo del codice è invertire/concatenare stringhe, concentrati su quello, utilizzando stringhe definite direttamente nel codice.
 
Pubblicità
Pubblicità
Indietro
Top