如何在可执行文件的参数中包含回车符?

Har*_*Cho 3 executable ascii carriage-return command-line-arguments

我有一个简单的程序,argv逐个字符打印,我想传递回车('\r' 或ASCII#0x0D)作为程序参数.如何在linux OS(Ubuntu)中实现这一目标?我正在使用bash.

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {
    int i;  

    for(i = 1; i < argc; i++) {     
        char* curr = argv[i];
        while(*curr != '\0') {
            printf("[%c %x] ", *curr, *curr);
            curr++;
        }
        printf("\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

假设我们的可执行程序被调用test,如果输入是:

./test hi
Run Code Online (Sandbox Code Playgroud)

然后我们得到

[h 68] [i 69]
Run Code Online (Sandbox Code Playgroud)

或者如果我想打印换行符,我用命令执行程序:

./test '[Enter Pressed]'
Run Code Online (Sandbox Code Playgroud)

然后我们得到

[
 0a] 
Run Code Online (Sandbox Code Playgroud)

我应该为程序参数键入什么,以便打印出回车符?或者更常见的是键盘不支持的任何ASCII字符?

rua*_*akh 7

这实际上不是C问题; 问题是,如何在可执行文件的参数中包含回车符.

你没有说明你正在使用什么shell,但是在许多shell中,你可以这样写:

./test $'\r'
Run Code Online (Sandbox Code Playgroud)

where $'...'是一种特殊的引号,可以让你使用C风格的转义序列.(例如,参见Bash参考手册中的§3.1.2.4"ANSI-C引用".)

如果您的shell不支持该表示法,但符合POSIX标准,则可以使用它printf为您处理转义序列:

./test "$(printf '\r')"
Run Code Online (Sandbox Code Playgroud)

(参见POSIX规范Shell命令语言部分中的§2.6.3"命令替换",以及printf实用程序的文档.)