webForumDet fria alternativet

C, array av pekare och gets(..)

3 svar · 528 visningar · startad av jabbalizer

jabbalizerMedlem sedan jan. 2001134 inlägg
#1

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
#2

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
#3

*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
#4

tackar =)

Genererad på 373 ms · cache AV · v20260730165559-full.f96bc7eb