2016-07-30 9 views
1

Ich möchte ein C-Programm schreiben, das eine Region eines Emacs-Puffers aufnimmt und die Region durch ihre Ausgabe ersetzt.Emacs-Puffer an C übergeben

Hier ist mein C-Programm:

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    printf("The argument given was: %s\n",argv[1]); 
} 

ich das Kompilieren mit

g++ -Wall -o c_example c_example.c 

und den binären in meinem Weg legen. Als ich

c_example Hello 

im Terminal zu tun, erhalte ich

The argument given was: Hello 

aber wenn ich "Hallo" in einem Emacs-Puffer und verwende Shell-Befehl-on-Region mit „Cu M- wählen | c_example Es wird ersetzt durch

The argument given was: (null) 

statt. Warum ist das?

+2

kein Emacs Benutzer, aber ich denke, das Pipe-Zeichen bedeutet, dass Sie den Puffer als Standardeingabe sind Rohrleitungen. – a3f

Antwort

4

Der Inhalt eines Emacs-Puffers, der an den Befehl filter übergeben wird, wird nicht von der Befehlszeile, sondern von der Standardeingabe abgerufen. Sie sollten es mit fgets() oder einer der anderen Eingabefunktionen von <stdio.h> lesen.

diese Version Versuchen:

#include <stdio.h> 

int main(void) { 
    char line[80]; 
    if (fgets(line, sizeof line, stdin)) { 
     printf("The first line of the buffer is: %s", line); 
    } 
    return 0; 
}