Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [RISOLTO] Problema con il mio strcat
Forum - C/C++ - [RISOLTO] Problema con il mio strcat

Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 19:09
Martedì, 26/02/2013
Salve a tutti, ho un problema con il mio strcat

Ecco il codice(strcat):
Codice sorgente - presumibilmente C++

  1. char * strcat(char *dest, const char *src)
  2. {
  3. int dest_len = strlen(dest);
  4. int i;
  5. for (i = 0 ; src[i] != '\0' ; i++)
  6. {
  7. dest[dest_len + i] = src[i];
  8. }
  9. dest[dest_len + i] = '\0';
  10. return dest;
  11. }



Ecco il codice(strlen):
Codice sorgente - presumibilmente C++

  1. int strlen(const char *str)
  2. {
  3. int i = 0;
  4. while(str[i] != '\0')
  5. {
  6. i++;
  7. }
  8. return i;
  9. }



Ecco il codice(gets):
Codice sorgente - presumibilmente C#

  1. string gets()
  2. {
  3. string input = "";
  4. while(!(inportb(0x60) == 28)
  5. {
  6.    if (inportb(0x60) == 30) strcat(input, "a");
  7.    //etc...
  8. }
  9. return input;
  10. }



Il problema è che quando premo(sulla tastiera) il carattere "a", e poi premo invio, al posto di scrivermi una sola "a", me ne scrive 50! Come mai?
Grazie! :k:

Ultima modifica effettuata da LittleHacker il 28/02/2013 alle 18:40


Android User :)

MudStorm OS Source GitHub: https://github.com/Piso94/MudStorm-OS
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:17
Martedì, 26/02/2013
ma....scusa eh.....
Codice sorgente - presumibilmente C/C++

  1. char input[250] = "\0";
  2. while(!(inportb(0x60) == 28)
  3. {
  4.    if (inportb(0x60) == 30) strcat(&input, "a");
  5.    //etc...
  6. }


Codice sorgente - presumibilmente C++

  1. char * strcat(char *dest, const char *src)
  2. {
  3. int dest_len = strlen(dest);
  4. int i;
  5. for (i = 0 ; i < dest_len + strlen(src) ; i++)
  6. {
  7. dest[dest_len + i] = src[i];
  8. }
  9. dest[dest_len + i] = '\0';
  10. return dest;
  11. }


Ultima modifica effettuata da il 26/02/2013 alle 20:23
PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 18:39
Giovedì, 28/02/2013
Testo quotato

Postato originariamente da TheDarkJuster:

ma....scusa eh.....
Codice sorgente - presumibilmente C/C++

  1. char input[250] = "\0";
  2. while(!(inportb(0x60) == 28)
  3. {
  4.    if (inportb(0x60) == 30) strcat(&input, "a");
  5.    //etc...
  6. }


Codice sorgente - presumibilmente C++

  1. char * strcat(char *dest, const char *src)
  2. {
  3. int dest_len = strlen(dest);
  4. int i;
  5. for (i = 0 ; i < dest_len + strlen(src) ; i++)
  6. {
  7. dest[dest_len + i] = src[i];
  8. }
  9. dest[dest_len + i] = '\0';
  10. return dest;
  11. }




Ok, grazie, sono riuscito a risolvere il problema dei caratteri eccessivi! :k:


Android User :)

MudStorm OS Source GitHub: https://github.com/Piso94/MudStorm-OS
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:05
Giovedì, 28/02/2013
C' è altro? Ti ho risolto tutto o hai dovuto modificare qualcosa a ciò che ho scritto?

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 22:30
Giovedì, 28/02/2013
Testo quotato

Postato originariamente da TheDarkJuster:

C' è altro? Ti ho risolto tutto o hai dovuto modificare qualcosa a ciò che ho scritto?



No, oltre a un problema della lettura da tastiera, che dovrò aprire un nuovo topic, nulla!
Però se riesci a risolvermi questo:

Per andare a capo uso nella funziona print il carattere \n, e per controllare se c'è e andare a capo, uso questo codice:

Codice sorgente - presumibilmente C++

  1. void print(char* message)
  2. {
  3.     unsigned int i;
  4.     char* mem = (char*)(0xb8000);
  5.     i = (line * 80*2);
  6.     line++;
  7.         while(*message != NULL)
  8.         {      
  9.                 if (*message == '\n')
  10.                 {      
  11.                         i = (line * 80*2);
  12.                         line++;
  13.                         *message = '\0'; // Modifico da \n a vuoto
  14.                 }
  15.                         mem[i] = *message;
  16.                         message++;
  17.                         i++;
  18.                         mem[i] = 0x07;
  19.                         i++;
  20.         }
  21. }


Con questo codice riesco ad andare a capo comodamente :D , ma ho un problema, cioè quando va a capo, visto che c'èra la \n, mi lascia lo spazio tra il bordo e la prima lettera! Come posso risolvere? :k:
Esempio:
|Ciao
| Come
| Stai


Android User :)

MudStorm OS Source GitHub: https://github.com/Piso94/MudStorm-OS
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:32
Venerdì, 01/03/2013
è forse colpa del line++ nel primo if? Comunque mi sa che siamo OT, quindi, apri una nuova discussione

PM Quote