Как напечатать escape-символ в строке взятой из аргумента командной строки? - PullRequest
0 голосов
/ 27 августа 2018

После компиляции следующего кода я запускаю его как

ввод: ./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]);
}

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

проверить эту программу, вход: стек '\ 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]);  
}  
0 голосов
/ 27 августа 2018

попробуйте поработать с этой функцией:

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++;
        }
    }
}
0 голосов
/ 27 августа 2018

«Escape-последовательности» в строке или символах в коде разрешаются компилятором в время компиляции .Он вообще не обрабатывается во время выполнения.

Если вы работаете в системе POSIX (например, macOS, Linux или аналогичной), вы можете использовать оболочку для вставки новых строк для вас при запуске вашей программы:

$ ./a.out '`echo -n -e "stack\noverflow"`'

Это вызовет команду echo и попросит ее повторить строку "stack\noverflow" без завершающей строки (это то, что делает опция -n).Внедренный "\n" будет проанализирован echo (из-за опции -e) и вставит новую строку в строку, которую он "печатает".Вывод, напечатанный echo, будет передан в качестве одного аргумента вашей программе.

Единственный другой вариант - это явный синтаксический анализ строки в вашей программе и вывод новой строки при обнаружении символа '\\'сопровождаемый символом 'n'.

...