如何在从命令行参数获取的字符串中打印转义字符?
how to print escape character in string taken from command line argument?
编译如下代码后,我运行起来像
输入:./a.out stack'\n'overflow
输出:
stack\noverflow
输入:./a.out stack"\n"overflow
输出:
stack\noverflow
输入:./a.out stack\noverflow
输出:
stack\noverflow
上述输入的预期输出:
stack
overflow
这是我的代码:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("string from comand line : %s\n", argv[1]);
}
"Escape sequences" 中的字符串或代码中的字符由编译器在 编译时 解析。它根本没有在 运行 时间处理。
如果您使用的是 POSIX 系统(如 macOS 或 Linux 或类似系统),那么您可以在 [=35= 时使用 shell 为您插入换行符]宁你的程序:
$ ./a.out '`echo -n -e "stack\noverflow"`'
这将调用 echo
命令并要求它回显字符串 "stack\noverflow"
而没有尾随换行符(这就是 -n
选项所做的)。嵌入的 "\n"
将被 echo
解析(因为 -e
选项)并在字符串 "prints" 中插入一个换行符。 echo
打印的输出将作为单个参数传递给您的程序。
唯一的其他选择是显式解析程序中的字符串,并在找到字符 '\'
后跟字符 'n'
.
时打印换行符
检查这个程序,输入:stack'\n'overflow
输出:堆栈
溢出
#include<stdio.h>
#include<string.h>
void addescapeseq(char *ptr)
{
char *temp;
while(strstr(ptr,"\n")||strstr(ptr,"\t")||strstr(ptr,"\r"))
{
if(temp=strstr(ptr,"\n"))
{
*temp=10;
strcpy(temp+1,temp+2);
}
else if(temp=strstr(ptr,"\r"))
{
*temp=13;
strcpy(temp+1,temp+2);
}
else if(temp=strstr(ptr,"\t"))
{
*temp=9;
strcpy(temp+1,temp+2);
}
}
}
int main(int argc,char *argv[])
{
addescapeseq(argv[1]);
printf("Data : %s\n",argv[1]);
}
尝试使用此功能:
void ft_putstr(char *s)
{
int i = 0;
while (s[i])
{
if (s[i] == '\')
{
if (s[i + 1] == 'n')
{
putchar('\n');
i += 2;
}
}
if (s[i] != '[=10=]')
{
putchar(s[i]);
i++;
}
}
}
编译如下代码后,我运行起来像
输入:./a.out stack'\n'overflow
输出:
stack\noverflow
输入:./a.out stack"\n"overflow
输出:
stack\noverflow
输入:./a.out stack\noverflow
输出:
stack\noverflow
上述输入的预期输出:
stack
overflow
这是我的代码:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("string from comand line : %s\n", argv[1]);
}
"Escape sequences" 中的字符串或代码中的字符由编译器在 编译时 解析。它根本没有在 运行 时间处理。
如果您使用的是 POSIX 系统(如 macOS 或 Linux 或类似系统),那么您可以在 [=35= 时使用 shell 为您插入换行符]宁你的程序:
$ ./a.out '`echo -n -e "stack\noverflow"`'
这将调用 echo
命令并要求它回显字符串 "stack\noverflow"
而没有尾随换行符(这就是 -n
选项所做的)。嵌入的 "\n"
将被 echo
解析(因为 -e
选项)并在字符串 "prints" 中插入一个换行符。 echo
打印的输出将作为单个参数传递给您的程序。
唯一的其他选择是显式解析程序中的字符串,并在找到字符 '\'
后跟字符 'n'
.
检查这个程序,输入:stack'\n'overflow
输出:堆栈
溢出
#include<stdio.h>
#include<string.h>
void addescapeseq(char *ptr)
{
char *temp;
while(strstr(ptr,"\n")||strstr(ptr,"\t")||strstr(ptr,"\r"))
{
if(temp=strstr(ptr,"\n"))
{
*temp=10;
strcpy(temp+1,temp+2);
}
else if(temp=strstr(ptr,"\r"))
{
*temp=13;
strcpy(temp+1,temp+2);
}
else if(temp=strstr(ptr,"\t"))
{
*temp=9;
strcpy(temp+1,temp+2);
}
}
}
int main(int argc,char *argv[])
{
addescapeseq(argv[1]);
printf("Data : %s\n",argv[1]);
}
尝试使用此功能:
void ft_putstr(char *s)
{
int i = 0;
while (s[i])
{
if (s[i] == '\')
{
if (s[i + 1] == 'n')
{
putchar('\n');
i += 2;
}
}
if (s[i] != '[=10=]')
{
putchar(s[i]);
i++;
}
}
}