Ten fragment kodu działa nieco dziwnie według mojego gustu. Proszę, czy ktoś chce wyjaśnić, dlaczego? I jak zmusić '\ n' do interpretowania jako specjalnego znaku?Interpretowanie " n" w printf ("% s", ciąg)
[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;
}
Dolna linia, intencją jest, aby drugi ciąg był drukowany w dwóch liniach, podobnie jak pierwszy. Ten program jest uproszczeniem. Prawdziwy program ma problemy z odczytaniem pliku za pomocą fgets
(nie jest to argument S.O. do argv
, jak tutaj), ale myślę, że rozwiązanie tutaj również rozwiąże ten problem.
Ucieczki odwrotne są znaczące w kodzie źródłowym C *, ale nie są znaczące dla 'printf' ani' fgets' ani żadnej innej funkcji biblioteki wykonawczej C. Argumenty linii poleceń mogą przekonwertować ich ukośnik odwrotny na coś innego * przez powłokę *, ale nie możesz na to liczyć, ani nie możesz liczyć na to, że jest on zgodny z tym, co robi kompilator C, aby napisać ciągi literałów. Jeśli chcesz przetłumaczyć '\ n' na znak nowego wiersza w swoim wejściu do programu, musisz to zrobić samodzielnie, ręcznie. – zwol
Dziękuję. Bardzo trafny komentarz. Może taka funkcja jest już dostępna w rozległej bibliotece C? –
Z przykrością muszę stwierdzić, że nie ma takiej funkcji. – zwol