Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

return(string) Dalczego prgoram nie zwrca znennej tesktowej ?

Ostatnio zmodyfikowano 2019-05-23 21:08
Autor Wiadomość
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().
P-174677
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/458
2. Patrz opis specyfikatora typów dla liter "c" oraz "S" oraz "d": http://cpp0x.pl/dokumentacja​/standard-C​/tekst-sformatowany-printf/736
3. 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/ub

Na 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++.
P-174684
nanoant20
» 2019-05-23 09:26:14
królu Julianie@DejaVu

Proszę nie kłóć się.
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ę milczenia

Staraj 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 grata
to kliknij delete z moim ID
P-174687
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.
P-174692
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ł?
P-174696
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?
P-174697
nanoant20
» 2019-05-23 17:38:34
tak to ostrzeżenie miałem do
C/C++
printf( "%s\n", system( "ls -l" ) ); // crash

ale przy tym kodzie
C/C++
char output = static_cast < char >( system( "ls -l" ) );
printf( "%s", & output );

//i przy tym

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.
P-174698
pekfos
» 2019-05-23 17:45:13
C/C++
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.
P-174700
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona