如何打印两行中间有'\n'的字符串?

Joh*_*eet 2 c printf

我有个问题。我需要用 C 创建一个程序,将字符串作为参数并打印它。问题是:如果我把\nor\t放在中间,我的程序会将其打印为nor t。但我需要将它们打印为新行或表格。程序必须理解\n\t. 我该怎么做?

预期结果:

$> ./my_program aaa\nbbb
aaa
bbb
$>
Run Code Online (Sandbox Code Playgroud)

我的(不正确的)结果:

$> ./my_program aaa\nbbb
aaanbbb
$>
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{   
    int i = 0;
    //printf("%s", argv[1]); - that doesn't works also :(
    while (argv[1][i] != '\0') {
        printf("%c", argv[1][i]);
        i++;
    }
    return (0); 
}
Run Code Online (Sandbox Code Playgroud)

我尝试了使用printfwrite功能。我尝试将其打印为字符串或字符......

Jer*_*fin 7

一旦你有了一个嵌入了换行符的字符串,将其打印成两行就非常简单了——几乎任何可以打印出字符串的东西都可以做到这一点。

#include <stdio.h>

int main() { 
    char const *s = "aaa\nbbb";
    printf("%s", s);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

aaa
bbb
Run Code Online (Sandbox Code Playgroud)

因此,您面临的问题不是打印字符串,甚至与 C 本身根本没有关系。您真正的问题归结为:“如何传递带有嵌入式换行符的命令行参数?” 幸运的是,有一种非常简单的方法可以做到这一点(至少使用 bash 或 zsh)。让我们从一个简单的程序开始打印第一个命令行参数:

aaa
bbb
Run Code Online (Sandbox Code Playgroud)

从那里开始,这就是我们如何调用该程序的全部内容:

./a.out aaa$'\n'bbb
Run Code Online (Sandbox Code Playgroud)

结果:

aaa
bbb
Run Code Online (Sandbox Code Playgroud)

这里的“技巧”是$'\n',它告诉 shell“展开” ,\n以便调用的程序将其视为换行符。