dobrý den,
potřeboval bych aby při příkazu system("ping "web) to odeslalo ping na webovou stránku, která se nachází v proměnné web. chtěl bych se zeptat jestli by to šlo? Asi hodinu sem googlil a nevygooglil
Děkuji předem i zadem
dobrý den,
potřeboval bych aby při příkazu system("ping "web) to odeslalo ping na webovou stránku, která se nachází v proměnné web. chtěl bych se zeptat jestli by to šlo? Asi hodinu sem googlil a nevygooglil
Děkuji předem i zadem
string a="seznam.cz";
string b("ping ");
b+=a;
system(b.c_str());
Velice děkuji. Jen bych se chtěl zeptat, paroč mi to hází při běhu aplikace chybu
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
string a;
scanf("%c", &a);
string b("ping ");
b += a;
system(b.c_str());
system("pause");
return EXIT_SUCCESS;
}
dělam v c++ a vždy to řekne neodpovídá a začne to online vyhledávat řešení
#7 jano
Ano, vytvoření instance třídy string a následné načítání do jejího vnitřního bufferu, je (bohužel) běžná praxe. Nebo jinými slovy - chybné míchání C a C++ je skutečně běžnou praxí.
Je hodně optimistické předpokládat, že adresa instance třídy string bude totožná s adresou interního bufferu. A stejně tak je hodně optimistické předpokládat, že když nějaké třídě změním natvrdo zvenku interní data, tak to bude pořád korektně fungovat. To si můžu dovolit na nějaké třídě, kterou jsem sám implementoval a vím, jak bude fungovat na každém (i v budoucnu) použitém překladači - ovšem v takovém případě nevím, proč bych pro podobné taškařice nemohl dodat nějakou metodu té třídy.
#7 jano
#8 ondra.holub
Trochu mi to objasněte - žiji v domění, že string (zjednodušeně), má dynamické pole (třídu typu allocator) a atribut určující aktuální délku pole. Tzn. za předpokladu, že by allocator měl již nějakou paměť naalokovanou, tak i když do té paměti zapíšu, tak string se bude stále jevit jako prázdný, protože jeho atribut pro určení velikosti je stále nulový.
Nestudoval jsem zdrojové kódy stringu, ale existenci atributu velikosti vyvozui z faktu, že do stringu můžu vložit libovolné množství znaků '\0' a následně s nimi pracovat jako s běžným znakem.
Tak jak je to?
#9 yaqwsx
Chtěl jsem ten svůj příspěvek napsat tak, že je nesmysl používat scanf na adresu std::stringu. Asi jsem se moc zamotal do ironie a nebylo to z toho mého příspěvku moc jasné.
Je to přesně tak, jak píše yaqwsx. Pokud udělám něco takového:
std::string a;
scanf("%c", &a);
Tak musím počítat s tím, že string má v sobě délku a nějaký buffer. Může tam toho být více, může to být v libovolném pořadí a něco může být ukryto třeba za nějakým dalším ukazatelem. Ten scanf je něco podobného jako
std::string a;
((char*)(&a))[0] = 'x';
Takže potom záleží na tom, co mám na začátku toho stringu (a to si přepíšu). Může se tedy změnit i ta délka, ale bude to pořád nesmysl.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku