我遇到了一个问题。我需要用C语言创建一个程序,它以字符串为参数并打印它。问题是:如果我把\n
或\t
放在中间,我的程序将其打印为n
或t
。但我需要将它们打印为新的一行或表格。程序必须理解\n
和\t
。我如何才能做到这一点?
预期结果:
$> ./my_program aaa\nbbb
aaa
bbb
$>
我的(错误)结果:
$> ./my_program aaa\nbbb
aaanbbb
$>
这是我的准则
#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);
}
我尝试使用printf
和write
函数。我尝试将其打印为字符串或按字符...
3条答案
按热度按时间7lrncoxx1#
一旦有了一个嵌入了换行符的字符串,用两行打印出来就非常简单了--几乎任何可以打印字符串的东西都可以做到这一点。
结果:
所以,你面临的问题不是打印字符串,甚至与C本身也没有任何关系。你真正的问题归结为:“how do you pass a command line parameter with an embedded newline?”幸运的是,有一种非常简单的方法可以做到这一点(至少使用bash或zsh)。让我们从一个简单的程序开始,打印出第一个命令行参数:
从这里开始,我们要做的就是如何调用程序:
结果:
这里的“技巧”是
$'\n'
,它告诉shell“展开”\n
,这样被调用的程序将看到它作为一个换行符。cclgggtu2#
您的程序一次输出一个字符的命令行参数:使用
%s
可获得相同的结果:问题来自命令shell处理
\
字符的方式。您的shell不会将\n
解释为命令行参数中的换行符,而是将其解释为引号和\
本身的转义。您可以通过以下方式引用参数,在命令行参数中传递换行符:
或者,您可以通过编写
./my_program aaa\\nbbb
或./my_program 'aaa\nbbb'
将\
传递给程序,并修改程序以显式解释转义序列:30byixjq3#
要打印2个字符
\
n
或打印2个字符\
t
作为换行符和制表符,请处理字符串,查找以 * 转义序列 * 开头的\
。C定义了4个转义序列。
只看 simple-escape-sequences,C定义:' \”\?\ \a \B \f \n \r \t \v
所以除了\n \t之外,代码还可以查找所有的