Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Programma in C che da caratteri strani in fondo alla stringa

    Salve,

    ho un problema con il seguente codice, compilandolo non mi appare nessun errore ma quando avvio il debug, mi chiede come da codice di inserire le due stringhe, le concatena stampando i primi 5 caratteri della seconda stringa e ci aggiunge alcuni caratteri particolari. Non so come toglierli.

    p.s. non posso usare la <string.h> perchè così dice l'esercizio dato da una mia Prof.



    codice:
    #include <stdio.h>
    int main(){
        char a[20], b[20];
        printf("stringa 1:");
        scanf("%s", a);
        printf("stringa 2:");
        scanf("%s", b);
        int i, c;
        c = -1;
        for (i = 0; i < 21; ++i){
            if ((a[i] == '\0') && (c < 0)){
                    c = i;
            }
        }
        
        for (i = c; i<c + 5; ++i){
            (a[i] = b[i - c]);
        }
        printf("%s\n", a);
        
        fflush(stdin);
        getchar();
    
    
        return 0;
    }
    Ultima modifica di MItaly; 16-04-2014 a 21:52

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Nelle scanf delle due stringhe bisogna utilizzare l'operatore di indirizzo & per memorizzarle

    codice:
    printf("stringa 1:");
    codice:
    scanf("%s", &a);
    printf("stringa 2:");
    scanf("%s", &b);
    Ultima modifica di Eduadie; 16-04-2014 a 15:43

  3. #3
    Quote Originariamente inviata da Eduadie Visualizza il messaggio
    Nelle scanf delle due stringhe bisogna utilizzare l'operatore di indirizzo & per memorizzarle

    codice:
    printf("stringa 1:");
    codice:
    scanf("%s", &a);
    printf("stringa 2:");
    scanf("%s", &b);
    Purtroppo il problema si ripresenta nuovamente
    E se io volessi utilizzare la libreria <string.h>?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Esiste la funzione strcat molto più semplice come potrai capire

  5. #5
    ImmagineC.jpg questo è il problema. Si ripresenta anche mettendo la & nella scanf

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da Eduadie Visualizza il messaggio
    Nelle scanf delle due stringhe bisogna utilizzare l'operatore di indirizzo & per memorizzarle
    No.
    Il nome di un array è anche l'indirizzo del suo primo elemento. Pertanto è corretto scrivere scanf("%s", a);
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Tu concateni i 5 caratteri della seconda stringa nella prima , ma non metti nessun terminatore stringa,
    causa di quei caratteri "strani" che vedi ..


    codice:
    for (i = c; i<c + 5; ++i){
        (a[i] = b[i - c]);
    }
    a[i]=0; //terminatore stringa equivalente a  a[i]='\0'
    Tecnologia

  8. #8
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Tu concateni i 5 caratteri della seconda stringa nella prima , ma non metti nessun terminatore stringa,
    causa di quei caratteri "strani" che vedi ..


    codice:
    for (i = c; i<c + 5; ++i){
        (a[i] = b[i - c]);
    }
    a[i]=0; //terminatore stringa equivalente a  a[i]='\0'
    Grazie mille

  9. #9
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    No.
    Il nome di un array è anche l'indirizzo del suo primo elemento. Pertanto è corretto scrivere scanf("%s", a);
    In realtà è più complicato. Il nome dell'array è di tipo array, ma in praticamente ogni contesto (tutto tranne che sizeof, & e poco altro) decade in un puntatore al primo elemento. &array restituisce un puntatore ad array, che ha lo stesso valore del puntatore al primo elemento, ma tipo diverso (concettualmente punta a tutto l'array, non al solo primo elemento), e in linea di principio non si può assegnare ad un semplice puntatore al tipo-base dell'array.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.