我想写一个C程序,它接收一个Emacs缓冲区的区域,并用它的输出替换该区域。
这是我的C程序:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("The argument given was: %s\n",argv[1]);
}
我用
编译它g++ -Wall -o c_example c_example.c
并将二进制文件放入我的路径中。当我做的时候
c_example Hello
在终端,我得到了
The argument given was: Hello
但如果我在Emacs缓冲区中选择“Hello”并使用带有“C-u M- | c_example”的shell-command-on-region,则将其替换为
The argument given was: (null)
代替。这是为什么?
答案 0 :(得分:4)
传递给filter
命令的emacs缓冲区的内容不是从命令行检索的,而是从标准输入检索的。您应该使用fgets()
或<stdio.h>
中的任何其他输入函数来阅读它。
试试这个版本:
#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;
}