Gå til innhold

starteet program med c++ på linux


Anbefalte innlegg

Videoannonse
Annonse

hvordan er det mulig å kjøre et program med parametere som skal ingis av brukeren?

liksom, jeg har lyst at brukeren skal kunne definere hvilken iso fil skal mountes

 

char input[1000];

cin >> input; //brukeren ingir plass av iso fil

system("sudo mount -o loop -t iso9660 ***input*** /mnt/iso");

 

//***input*** skal bli det som brukern gir inn, hvordan legger jeg de to tingene sammen?

Endret av gogodidi
Lenke til kommentar

sprintf funksjonen er ganske enkel å bruke

int sprintf(

char *buffer,

const char *format [,

argument] ...

);

 

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int main(int argc, char **argv)
{
 char input[1000]
 char *my_string = new char[1000];

 std::cin >> input;

 sprintf(my_string, "sudo mount -o loop -t iso9660 %s /mnt/iso", (char*)&input)
 system(my_string);

 delete [] my_string;

 return 0;
}

Endret av GeirGrusom
Lenke til kommentar

Kan du ikke lage en streng variabel som inneholder hele kommandoen?

Slik at kallet blir slik:

 

system(string);

 

String variabelen er vel relativt lett å manipulere.

 

EDIT: GeirGrusom var før meg. Der har du også kode eksempel på hvordan det gjøres.

Endret av Orjanp
Lenke til kommentar
*orjanp, jeg har lyst å lage programmet slika t jeg ikke hele tiden må taste in det samme, jeg kunne jo bruke komando linjen istedenfor da ;)

Det er ikke noe forskjell på disse to:

 

Eks1.

string tmp = "en fin kommando";
system(tmp);

 

Eks2.

system("en fin kommando");

 

Forskjellen ligger i at i første eksempel kaller du system med en variabel og kan manipulere variabelverdien før du kaller system. Det var vel det du var interessert i. Å kunne legge input fra tastaturet til kommandoen din.

Regnet med at du visste hvordan man la sammen to strenger, eller som i ditt tilfelle, la en streng inni en annen streng. Derfor ønsket jeg å vise at du ikke trengte å bruke eks2, men kunne istedetfor bruke eks1.

Nå har GeirGrusom gitt deg hele koden på hvordan du kan gjøre dette. Jeg valgte å ikke gjøre det fordi jeg regnet med at du klarte det selv bare du fikk en dytt i riktig retning. :)

Mulig jeg var litt for vag.

 

Ørjan...

Endret av Orjanp
Lenke til kommentar

er det sånn at sprintf() er det samme som printf() mht. syntax etc - men at den istedet for å skrive resultatet på skjermen, returnerer en variabel? Altså dette er det samme:

char[100] test;
char[100] annenstreng = "hallaballa";
int variabel = 2;
test = sprinf("hei %d %s", variabel, annenstreng);
printf("%s", test);

som dette:

char[100] test;
char[100] annenstreng = "hallaballa";
int variabel = 2;
prinf("hei %d %s", variabel, annenstreng);

 

Eller loker jeg nå, og du må loke masse med pekere etc... ?

 

Planlegger en GTK (?) GUI til gravitymap som funker ved å manipulere input-linja, så det hadde vært greit å vite :)

Lenke til kommentar
er det sånn at sprintf() er det samme som printf() mht. syntax etc - men at den istedet for å skrive resultatet på skjermen, returnerer en variabel? Altså dette er det samme:

char[100] test;
char[100] annenstreng = "hallaballa";
int variabel = 2;
test = sprinf("hei %d %s", variabel, annenstreng);
printf("%s", test);

som dette:

char[100] test;
char[100] annenstreng = "hallaballa";
int variabel = 2;
prinf("hei %d %s", variabel, annenstreng);

 

Eller loker jeg nå, og du må loke masse med pekere etc... ?

 

Planlegger en GTK (?) GUI til gravitymap som funker ved å manipulere input-linja, så det hadde vært greit å vite :)

Du har rett i teorien, men syntaks og litt anna er feil.

sprintf(3) skriver resultatet til en peker til _preallokert_ minne. Pekeren sendes som første argument, ellers er syntaxen lik printf(3). sprintf(3) er en typisk buffoer overflow felle, snprintf(3) er den "trygge" versjonen. Eksempel:

 

char szOutput[sTRLEN];

 

/* Dette kan gi en buffer overflow */

sprintf(szOutput, "Test: %s", szUserInputString);

 

/* denne er "safe" */

snprintf(szOutput, STRLEN, "Test: %s", szUserInputString);

Lenke til kommentar
*orjanp, jeg har lyst å lage programmet slika t jeg ikke hele tiden må taste in det samme, jeg kunne jo bruke komando linjen istedenfor da ;)

Det er ikke noe forskjell på disse to:

 

Eks1.

string tmp = "en fin kommando";
system(tmp);

 

Eks2.

system("en fin kommando");

For å pirke litt, det er en bitteliten forskjell, men ikke som hverken bruker, eller programmerer ville merke.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...