2012-06-28 4 views
4

У меня есть этот код:Printf игнорирует один обратный слэш «»

int main(int argc, char * argv[]) 
{ 
int i; 
printf("%d%s",argc,argv[1]); 
return 0; 
} 

Если я запускаю этот код как a.out a\=b= .Я с помощью C-shell

Его выход «a=b=» есть ли способ, что его выход можно изменить на «a\=b=».

+3

Вы изменили вопрос по существу. Прежде чем речь шла о строках в C, теперь возникает вопрос, как ввести строку в командной строке оболочки. –

ответ

9

Обновление для редактируемого вопроса:

Вложите свой аргумент команды строки в кавычках:

$ a.out "a\=b=" 

Кавычки предотвращают оболочку от интерпретации аргумента командной строки в любом случае, так что просто эта строка передан в вашу программу. Я использую команду csh/bash .. с обоими.

В качестве альтернативы, вы можете "сбежать" в \ с другой и пропустить двойные кавычки:

$ a.out a\\=b= 

Предыдущий ответ на первоначальный вопрос:

Да, использовать два \:

char a[]="a\\=b="; 

выходы:

a\=b= 

Пояснение:

\ является экранирующий символ используется для обозначения специальной последовательности символов, поэтому для экземпляра \t указывает на вкладку. Если вы хотите на самом деле распечатать \t, вам нужно «сбежать» от этого \ с другим \. Смотрите этот пример и вывод:

printf("\t-->Hi\n"); /* print regular tab via \t      */ 
printf("\\t-->Hi\n"); /* want to print "\t", not tab ..so we use two \\ */ 

, что приводит к:

-->Hi 
\t-->Hi 

Это не уникальной функции printf(), ни реально C, могут языки использовать обратную косую черту, чтобы указать «экранирующие последовательности "в строках.

+0

как это можно сделать? могу ли я написать код, который может преобразовать '' a \ = b = "' в '" a \\ = b = "' –

+0

@nav_jan Не уверен, что я понимаю ваш вопрос - даже если вы положили две обратные черточки, printf будет правильно ее интерпретировать и генерировать на выходе. – Levon

+1

+1 для фактического ввода правильного кода – JeremyP

7

printf() не игнорирует вашу единственную обратную косую черту, это то, как синтаксический анализ строк C. Обратная косая черта - это символ escape, чтобы указать символ, который не так легко ввести в строку, например, строку новой строки (\n) или встроенную цитату (\"). Следовательно, чтобы включить обратную косую черту, вы должны включить два обратную косую черту (\\). Это относится ко всем строкам и не относится к printf().

+0

как это можно сделать? могу ли я написать код, который может преобразовать '' a \ = b = "' to '" a \\ = b = "' –

+0

Как у вас есть много мест и вы хотите их изменить? Звучит как работа для поиска + замена или регулярное выражение. – FatalError

+0

no Я передаю строку из командной строки 'a.out a \ = b =', и я хочу напечатать argv [1]. –

1

\ является символом escape в строках в C.Вы используете его для доступа к специальному символу, например, к новой строке (\n). Если вы хотите получить доступ к \ в качестве персонажа, вам также нужно сбежать от него: \\.

+0

как это можно сделать? могу ли я написать код, который может преобразовать '' a \ = b = "' в '" a \\ = b = "' –

+0

@nav_jan Нет, просто введите '\\', если вы хотите отобразить '\'. –

+0

что делать, если я даю строку из командной строки 'a.out a \ = b =' и я хочу напечатать argv [1] –

0

\\ является то, что читается как \ в C

\ единственный символ, используемый внутри полукокса или строки в C для обозначения какой-либо другой символ или строку символов. Это то, что подразумевается под именем «escape».

Поскольку он используется таким образом, необходимо было включить обратную косую черту один из символов, поддающихся такому подходу.

Некоторые другие последовательности: \ п новая линия \ т вкладке \ V вертикальная табуляция \ предупреждающего звонка звуковой

Смежные вопросы