编译以下代码后,我像
一样运行它输入:./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]);
}
答案 0 :(得分:4)
“转义序列”。完全不在运行时处理。
如果您使用的是POSIX系统(如macOS或Linux或类似系统),则可以在运行程序时使用Shell为您插入换行符:
$ ./a.out '`echo -n -e "stack\noverflow"`'
这将调用echo
命令,并要求它回显字符串"stack\noverflow"
而不尾随换行符(这就是-n
选项的作用)。嵌入的"\n"
将由echo
解析(由于-e
选项),并在它“打印”的字符串中插入换行符。 echo
打印的输出将作为单个参数传递给您的程序。
唯一的另一种选择是在程序中显式分析字符串,并在找到字符'\\'
后跟字符'n'
时打印换行符。
答案 1 :(得分:1)
检查此程序,输入: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]);
}
答案 2 :(得分: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] != '\0')
{
putchar(s[i]);
i++;
}
}
}