jabbalizerMedlem sedan jan. 2001134 inlägg
Vad är skillnaden?
char * args[10];
char test[20];
****** VARFÖR FUNKAR DETTA *****
gets(test);
args[0] = test;
******************************
execvp(args[0], args);
***MEN INTE OM MAN BYTER TILL DETTA ***
gets(args[0]);
***********************************
Och det viktigaste =) Vad ska man skriva för att kunna använda args[0] direkt? Och är det samma sak i scanf(...)?
msossnaMedlem sedan feb. 2002279 inlägg
Inte helt säker men tror problemet ligger i att args[0] är en char*, medans test är en array av char.
GunnarDMedlem sedan juni 20014 250 inlägg
*args[10] innebär att du skapar en array med char pekar, medans char test[20] skapar en sträng av char (20 teckenlång) och reserverar minne för det.
I fallet test[20], om man bara skriver test (ex. gets(test)) så använder man pekaren (test) som pekar mot det utrymmet som är reserverat för strängen.
När du sedan gör:
gets(test);
args[0] = test;
Så läser du först in en sträng till variabeln test och sedan sätter du att pekaren args[0] pekar är samma som pekaren test.
I fallet "gets(args[0]);" så har pekar inte args[0] någonstanns och det blir fel, det du får göra är att allocker minne som args[0] pekar på.
Du skulle kunna göra så här:
char * args[10];
char test[20];
****** VARFÖR FUNKAR DETTA *****
args[0] = test;
gets(test);
******************************
execvp(args[0], args);
Läs på lite hur pekare fungerar i C, kan vara rätt komplext!
jabbalizerMedlem sedan jan. 2001134 inlägg