如何在从命令行参数获取的字符串中打印转义字符?

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++;
        }
    }
}