2016-06-01 9 views
1

Ich habe diesen Code:Scanf Funktion zwischen C++ und Assembler

void scan() 
{ 
    char scanf_fmt[] = "%c"; 
    char printf_fmt[] = "%c\n"; 
    char character[30]; 

    _asm 
    { 
     push 1 // Buffer size, you can also write `push size character` 

     lea eax, character 
      push eax  // Pointer to character 

      lea eax, scanf_fmt 
      push eax    // Pointer to format string 
      call scanf_s 


      add esp, 12    // Clean up three pushes 

      movzx eax, byte ptr[character] // MOVZX: Load one unsigned byte into a 32-bit-register 
      push eax// Character as value 


      lea eax, printf_fmt 
      push eax // Pointer to format string 

      call printf 

      add esp, 8    // Clean up two pushes era 8 
    } 

    //return 0; 
} 

Diese Funktion druckt das erste Zeichen in einem Wort, aber ich kopierte diese Funktion, und ich änderte den Namen, zum Beispiel: scan()-scan2();.

Wenn ich die neue Funktion verwende, übernimmt das Programm das vorhergehende Wort der Funktion scan.

Wie kann ich tun, um mir ein anderes Wort zu lesen?

+1

'% c 'verbraucht nur ein einzelnes Zeichen, und lässt den Rest im Puffer. Sie müssen diese auslesen oder verwerfen. – Jester

+0

Danke, also Kann ich den Flush mit xor eax, eax machen? oder Wie kann ich den Flush machen? –

Antwort

0

mit

lea eax, character 
push eax  // Pointer to character 

Sie scanf sagen, wo die Daten setzen gescannt, in Ihrem Fall in

char character[30]; 

, wenn Sie eine zweite Funktion haben, aber den gleichen Puffer verwenden, werden Sie außer Kraft setzen Jeder andere Eingang

Wenn Sie den Inhalt speichern möchten, erstellen Sie einen zweiten Puffer, z

char character[30]; 
char character2[30]; 

und diese statt:

 push 1 
     lea eax, character2 
     push eax    // Pointer to buffer 
     lea eax, scanf_fmt 
     push eax    // Pointer to format string 
     call scanf_s 
     add esp, 12    // Clean up three pushes 

     movzx eax, byte ptr[character2] 
     push eax    // Character as value 
     lea eax, printf_fmt 
     push eax    // Pointer to format string 
     call printf 
     add esp, 8    // Clean up two pushes era 8