nanoant20 |
» 2019-05-22 19:15:48 @Jacob99 napisałem to we wcześniejszych swoich postach. Program zachowuje się poprawnie, zobacz logi które umieściłem.
Chodzi o to, że sam program w sobie nie ma sensu. Do komunikowania się między okienkami słuzy Winsock a nie system(). |
|
DejaVu |
» 2019-05-22 22:56:51 @nanoant20: Twój program był błędny. Proszę nie kłóć się. Nawet nie poświęciłeś 5 minut na przeczytanie tego co @pekfos Ci tłumaczył. 1. Patrz zwracana wartość przez funkcję: http://cpp0x.pl/dokumentacja/standard-C/system/4582. Patrz opis specyfikatora typów dla liter "c" oraz "S" oraz "d": http://cpp0x.pl/dokumentacja/standard-C/tekst-sformatowany-printf/7363. Niezdefiniowane zachowanie = program może się wywalić, ale nie musi. Podsumowując: to, że zaszły sprzyjające okoliczności i na Twoim kompilatorze dla tego przykładowego kodu tj. aplikacja się nie wywaliła to tylko i wyłącznie przypadek, a nie Twoje zaawansowane umiejętności programistyczne. Weryfikuj proszę swoją wiedzę z dokumentacją taką jak np. MSDN lub ze specyfikacją opisaną w standardzie C++. Nikt nie pamięta wszystkiego i w programowaniu należy najpierw wiedzę zweryfikować, a potem w oparciu o materiały referencyjne wypowiadać się. Staraj się nie wprowadzać innych w błąd tym bardziej, że osoba znacznie bardziej doświadczona niż Ty wypunktowała Twoje błędy, które po prostu zignorowałeś uważając, że wiesz lepiej. /edit: Dodatkowo możesz sobie poczytać to: https://en.cppreference.com/w/cpp/language/ubNa samym dole masz jeszcze ileś odnośników do stron, które możliwe, że też warto przeczytać, aby pogłębić swoją wiedzę z C++. |
|
nanoant20 |
» 2019-05-23 09:26:14 królu Julianie@DejaVu Gdyby @pekfos nie naskakiwał (odbieram to jako personalne ataki) na mnie Nie wiem czy ty nie rozumiesz co się do ciebie pisze, czy nie chcesz zrozumieć.. |
czy Nie masz pojęcia o czym piszesz. |
tylko odpowiedał rzetelnie słuchaj stary, nie wiem, ten kod to anomali, nie ma prawa się skompilować i wykonać ponieważ "to i to", lub "tak i tak" to by nie było żadne dyskusji. Nawet nie poświęciłeś 5 minut na przeczytanie tego ... |
a nie Twoje zaawansowane umiejętności programistyczne | Nigdy nikogo nie osądzaj zbyt pochopnie.Kto cię ustanowił sędzią? Jak zwrócić tablicę struktur / C++ ?taka kropelka, może da ci zarys zabawne jest to, że wytyka mi się ignorancję W jednym z postów piszę o tym, że jestem świadomy że nie powinno się tak wykorzystać tego polecenie, i naraża się system. następnie @pekfos cytuje mnie (wyszydzając mnie), a sam daje logi z "C:\Users\admin\" pewnie z uprawnieniami administratora. Podczas codziennej pracy korzysta się z konta standardowego, zamiast administratora, choćby nie wiem, jakim jest się experem. ... zaszły sprzyjające okoliczności i na Twoim kompilatorze dla tego przykładowego kodu itd. ... |
na przypadkowych kompilatorach online zachowanie identychne jak w moim środowiski. Jedynie gdzie masz rację, to to że zrządził to przypadek na resztę Twojej wypowiedzi zarzucam kurtynę milczeniaStaraj się nie wprowadzać innych w błąd | W którym mejscu napisałem, że nalezy traktować te klka linijek jako probierz?Napisałm tylko "It work". Traktuje to tylko jako ciekawostkę. Zaspakajam swój głód wiedzy. cytat “To know is nothing at all; to imagine is everything.” Anatole France P.S. Jezeli uwaszsz mnie za Persona non gratato kliknij delete z moim ID |
|
pekfos |
» 2019-05-23 15:03:20 tylko odpowiedał rzetelnie słuchaj stary, nie wiem, ten kod to anomali, nie ma prawa się skompilować i wykonać ponieważ "to i to", lub "tak i tak" to by nie było żadne dyskusji. |
Następnym razem zacytuję Ci dokumentację, zamiast Cię do niej skierować. Zaczynając od teraz (cytaty z cppreference): Wartość zwracana przez system(): Implementation-defined value. If command is a null pointer, returns a nonzero value if and only if the command processor exists. |
Wartość oczekiwana przez printf("%s"): The argument must be a pointer to the initial element of an array of characters. Precision specifies the maximum number of bytes to be written. If Precision is not specified, writes every byte up to and not including the first null terminator. |
Innymi słowy przekazujesz nieznaną, niewskaźnikową wartość jako wskaźnik na tekst. Pomińmy na razie, że wskaźnik ten zapisałeś do zmiennej char. Później dostałeś dokładny opis problemu w kodzie, a jak poprawiłeś coś zupełnie innego to jeszcze przykład, dla którego program działa błędnie. ponieważ system( "zwraca1" ) "zwraca1" nie jest znana systemowi |
Naprawdę musiałem tłumaczyć, że "zwraca1" to ten przypadkiem podany przed chwilą kod, który dosłownie zwraca 1 z main()? Nie masz pojęcia o czym piszesz. |
Zaraz po tym napisałem dokładny scenariusz pokazujący, że twoja poprawka nic nie dała. Jednak wciąż cytujesz to jako nierzetelną odpowiedź bez uzasadnienia. Coś się stało miedzy jednym zdaniem a drugim? Napisałm tylko "It work". |
Odnośnie Twoich testów: jak dokładnie zweryfikowałeś, że ich wynik jest poprawny? Na chłopski rozum wywołując system() wykonujesz polecenie (co wypisuje wynik) i żeby zademonstrować że system() zwraca wypisany wynik jako tekst, wypisujesz go ponownie. Tzn powinieneś mieć 2 razy wynik w konsoli. $ ./pro total 32 -rw-r--r-- 1 nanoant20 nanoant20 1933 22 maj 08:44 main.cpp -rwxr-xr-x 1 nanoant20 nanoant20 12169 22 maj 08:45 pro (null) |
Niezupełnie miało to miejsce. Co więcej, te (null) na końcu raczej jawnie mówi, że wynik testu jest niepoprawny. |
|
nanoant20 |
» 2019-05-23 17:17:37 Odnośnie Twoich testów: jak dokładnie zweryfikowałeś, że ich wynik jest poprawny? Na chłopski rozum wywołując system() wykonujesz polecenie (co wypisuje wynik) i żeby zademonstrować że system() zwraca wypisany wynik jako tekst, wypisujesz go ponownie. Tzn powinieneś mieć 2 razy wynik w konsoli.
$ ./pro total 32 -rw-r--r-- 1 nanoant20 nanoant20 1933 22 maj 08:44 main.cpp -rwxr-xr-x 1 nanoant20 nanoant20 12169 22 maj 08:45 pro (null)
Niezupełnie miało to miejsce. Co więcej, te (null) na końcu raczej jawnie mówi, że wynik testu jest niepoprawny. |
dokładnie napisałm co było kompilowane, a pod spodem logi, zrobiłeś z tego miszmasz Tzn powinieneś mieć 2 razy wynik w konsoli. |
to tak jakbyś ty wywołał u sibie w konoli polecenie "dir" i oczekiwał podwójnego wyniku wiem, że to wiesz (tylko tak dla jasności) komenda $ ./pro <-- wywołuje program i jeżeli się tam coś pokazał to jest o.k komendą $ echo $? <-- robie dokładnie to co ty komendą echo %errorlevel% w windowsie ale zostaw to. to mnie nie interesuje nie mam też się zamiaru odnośić do książkowej wiedzy o.k Mam tylko takie proste pytanie i to mnie tylko interesuje i tylko tego nie rozumię Dalczego kompilator nie zaprotestował? |
|
|
pekfos |
» 2019-05-23 17:33:06 dokładnie napisałm co było kompilowane, a pod spodem logi, zrobiłeś z tego miszmasz wiem, że to wiesz komenda $ ./pro <-- wywołuje program i jeżeli się tam coś pokazał to jest o.k komendą $ echo $? <-- robie dokładnie to co ty komendą echo %errorlevel% w windowsie |
Napisałeś, że testowałeś kod przed wrzuceniem na forum. Wtedy nie podałeś sposobu, w jaki to zrobiłeś. Output który zacytowałem dotyczy funkcjonalnie identycznego kodu. Mam tylko takie proste pytanie i to mnie tylko interesuje i tylko tego nie rozumię
Dalczego kompilator nie zaprotestował? |
|
Dostałeś ostrzeżenie warning: format specifies type 'char *' but the argument has type 'int' [-Wformat]
|
Normalnie przypisanie do wskaźnika wartości nieodpowiedniego typu wyrzuci błąd, ale funkcje o nieokreślonej ilości argumentów w stylu C mają ten mankament, że nie sprawdzają typów na etapie kompilacji. W ogólnym przypadku tego się zwyczajnie nie da sprawdzić, tu masz warning, bo mowa o standardowej funkcji i kompilator jest w stanie określić poprawne typy na podstawie format stringa. Tzn powinieneś mieć 2 razy wynik w konsoli. | to tak jakbyś ty wywołał u sibie w konoli "dir" i oczekiwał podwójnego wyniku |
Więc jak by działał twoim zdaniem? |
|
nanoant20 |
» 2019-05-23 17:38:34 tak to ostrzeżenie miałem do printf( "%s\n", system( "ls -l" ) );
ale przy tym kodzie char output = static_cast < char >( system( "ls -l" ) ); printf( "%s", & output );
string zmienna = "ls -l"; const char * command = zmienna.c_str(); system( command );
kompilator nawet nie zaszemrał, i nie tylko umnie na onlin'owych też. I to jest moja niewiedza Więc jak by działał twoim zdaniem? |
ze skompilowanego kodu, zasada taka sam jak na windowsie $ clang++ main.cpp -o ./pro --<-kompiluje $ ./pro <--urchamiam total 40 <--wynik -rw-r--r-- 1 nanoant20 nanoant20 1680 22 maj 08:41 main.cpp <-wynik -rwxr-xr-x 1 nanoant20 nanoant20 13694 22 maj 08:42 pro <--wynik $ echo $? <-- %errorlevel% 0 <-- wynik, jeżeli polecenie wykonało się bezbłędnie konsola zwraca kod błędu 0.
|
|
pekfos |
» 2019-05-23 17:45:13 char output = static_cast < char >( system( "ls -l" ) ); printf( "%s", & output ); |
Funkcja oczekuje wskaźnika i podajesz wskaźnik. Tyle kompilator może sprawdzić. Czy wskaźnik ma sens w tym kontekście, to już zupełnie co innego. Drugi kod jest przydługi i nic więcej. Nigdy nie napisałem, że jest z nim coś nie tak. To znaczy nie licząc tego, że był nie na temat. |
|
1 2 « 3 » 4 |