Эта часть кода действует немного странно на мой вкус. Пожалуйста, кто-нибудь хочет объяснить, почему? И как заставить «\ n» интерпретироваться как особый символ?Интерпретация ' n' в printf ("% s", строка)
[email protected]:~/tmp/user/foo/bar$ ./interpretastring.x "2nd\nstr"
1st
str
2nd\nstr
[email protected]:~/tmp/user/foo/bar$ cat interpretastring.c
#include <stdio.h>
int main(int argc, char **argv)
{
char *s="1st\nstr";
printf("%s\n", s);
printf("%s\n", argv[1]);
return 0;
}
Подводя итог, предполагается, что вторая строка будет напечатана в двух строках, как и первая. Эта программа является упрощением. У реальной программы есть проблемы с чтением из файла с помощью fgets
(а не аргумент S.O. для argv
, как здесь), но я думаю, что решение здесь также решит.
Экраны обратной косой черты значительны в исходном коде C * *, но они не важны для 'printf', а не' fgets' и других функций библиотеки времени выполнения C. Аргументы командной строки могут получить обратную косую черту, преобразованную в что-то еще * оболочкой *, но вы не можете рассчитывать на это, и не можете рассчитывать на то, что она согласуется с тем, что делает компилятор C для строковых литералов. Если вы хотите перевести символ '\ n' на символ новой строки во вводной информации вашей программы, вам придется сделать это самостоятельно, вручную. – zwol
Спасибо. Очень уместный комментарий. Может быть, есть такая функция уже в обширной библиотеке C? –
С сожалением могу сказать, что такой функции нет. – zwol