26. oktober 1999 - 21:21Der er
6 kommentarer og 2 løsninger
Sammensætning af variabelnavne i c
Hvis man skal lave et system kald og parameteroverføre noget til kaldet eg. system("./read_line filnavn"); Det skal altid være programmet read_line der bliver startet, men filnavn varierer. Det skal parameteroverføres fra en anden funktion, således forestiller jeg mig noget i den her stil: system(variabelnavn); Hvor variabelnavn er sammensat af den faste ./read_line og det der bliver parameteroverført som filnavn.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvis jeg forstår dig ret, så skal 'variabelnavn' sammensættes af to forskellige strenge, for derefter at bruges i kaldet system().
#define MAX 20 // for eksempel
// Opret 2 strenge og initialiser dem char* streng1 = "./read_line "; char streng2[MAX]; strcpy(streng2, EnEllerAndenStreng);
// Smid det hele over i variabelnavn char variabelnavn[MAX+LaengdeAfFoersteStreng]; strcpy(variabelnavn, streng1); // kopierer streng1 og overskriver eventuelt eksisterende indhold strcat(variabelnavn, streng2); // tilføjer streng2
// Kaldet system(variabelnavn);
Håber, at det virker og at det var det du ville. Spørg hvis der er noget af det du ikke forstår.
system() kommandoen er ikke den rigtige at bruge, hvis du blot skal kalde videre til et andet program. system() kører gennem DOS command.com og starter således en ny udgave af command.com - og det æder bl.a. konventionel hukommelse. (Dvs. den del af din RAM, der ligger under 640KB) Ligeledes lider system() af den skavank, at du IKKE kan checke retur-koden fra programmet 'read_lin'.
Begge dele kan du gøre, hvis du i stedet bruger kommandoen 'spawn' sådan her:
ret = spawn(P_WAIT, ".\\read_line", "read_line", filnavn, NULL);
hvor ret> = 0 er returkoden fra dit program, ret < 0 betyder at kaldet gik galt, og så giver 'errno' variablen dig den præcise fejl.
Nu bliver jeg jo lidt i tvivl om svarene. soepro>> Det er under linux, så der vel ingen DOS ting der har indflydelse. Det er jo heller ikke til at vide ;-)
system() er den eneste der er ANSI C - og så skal du bruge den, sådan som ovenfor beskrevet. Du kan så selv lave en spawnl variant hvis du skal lave flere kald, sådan at du ikke behøve at stringe program-navn og parametre sammen hele tidenn (prototypen er en let måde at gøre det muligt at kalde rutinen med alt mellem 0 og 4 parametre - fremfor at bruge argument-lister):
soepro>>jeg troede at sprintf() konverterede et heltal til en streng, det kan den ihvertfald også bruges til. bjarke>>Hvis du kigger under man system i linux, så er det fint supporteret. Jeg vil også gerne lige vide hvad det der imho er for noget.
Du kan også bruge itoa() (betyder sikkert integer to array).
Og atoi() den modsatte vej
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.