Benbjo Skrevet 26. august 2008 Del Skrevet 26. august 2008 Hei, har problemer med en _svært_ enkelt C-program. Bruker IDEen Netbeans til mitt forbruk. Koden: #include <stdio.h> int main(int argc, char *argv[]) { int x; // printf("%d\n",argc); for (x=0; x<argc; x++) if (x>0) char msg = argv[x]; printf("Input: %s\n",msg); return 0; } Greia er at programmet skal lese inn et argument fra main, så lagre denne i variablen msg og så skrive ut. Ja, vet jeg kan skrive ut args direkte, men det er ikke oppgaven! Skjønner ikke hva som er feil. Får disse feilmeldingene: Helloworld.c: In function `main': Helloworld.c:22: error: parse error before "char" Helloworld.c:22: warning: initialization makes integer from pointer without a cast takker for hjelp! Lenke til kommentar
GeirGrusom Skrevet 26. august 2008 Del Skrevet 26. august 2008 if (x>0) char msg = argv[x]; printf("Input: %s\n",msg); Her er det 2 feil For det første, så er msg av typen char, og ikke char* og dessuten så faller denne variablen ut av scope før den brukes i neste linje. Lenke til kommentar
___ Skrevet 26. august 2008 Del Skrevet 26. august 2008 Du mangler endel curly brackets, i tillegg til at du har bommet på strenghåndteringen. Dette kompilerer og kjører ihvertfall: int main(int argc, char *argv[]) { int x; for (x=0; x<argc; x++) { if (x>0) { char *msg = argv[x]; printf("Input: %s\n",msg); } } return 0; } Werner Lenke til kommentar
Benbjo Skrevet 26. august 2008 Forfatter Del Skrevet 26. august 2008 Åja, må ha en * der også ja. Takk sal dere ha brackets vet jeg om. Har litt java-erfaring Lenke til kommentar
Jaffe Skrevet 26. august 2008 Del Skrevet 26. august 2008 Du kan forresten omgå if-sjekken ved å la for-løkken starte ved x = 1. I tillegg kan du skrive printf("Input: %s\n", argv[x]) i stedet for å definere en peker som peker til strengen i linja før. Dette er selvsagt en smakssak, men det blir litt unødvendig når du uansett bare bruker argv[x] én gang. Lenke til kommentar
Benbjo Skrevet 26. august 2008 Forfatter Del Skrevet 26. august 2008 En del av oppgaven er å tilordne argumentet man får i main til en ny variabel. Det med if-en er jeg klar over Egentlig er en del av koden unødvendig, men skulle sjekke forskjellige ting. Lenke til kommentar
Benbjo Skrevet 27. august 2008 Forfatter Del Skrevet 27. august 2008 Trenger litt mer hjelp: char strgetc(char s[], int pos); int main(int argc, char** argv) { char a; int b; printf("Skriv først et ord, så et tall som angir posisjonen til bokstaven du vil ha. Ordet og tallet skal ha mellomrom mellom seg:\n"); scanf("%s %d", &a, &b); strgetc(a, b); return (EXIT_SUCCESS); } char strgetc(char s[], int pos){ //char *ke = "f"; printf("lolfest"); //return *ke; } Skal gjøre noe mer i funksjonen strgetc (skrive ut tegnet som ligger i pos i teksten som angis). Problemet er at programmet nå ikke kjører og skjønner ikke hvorfor. Feilmeldingen jeg får er: test.c:21: warning: passing arg 1 of `strgetc' makes pointer from integer without a cast Lenke til kommentar
GeirGrusom Skrevet 27. august 2008 Del Skrevet 27. august 2008 Det er fordi du har definert a som char, og kaller strgetc med a som første parameter, når strgetc skal har char* og ikke vanlig char. Lenke til kommentar
Benbjo Skrevet 27. august 2008 Forfatter Del Skrevet 27. august 2008 Kan du forklare meg hva som er forskjellen? Lenke til kommentar
GeirGrusom Skrevet 29. august 2008 Del Skrevet 29. august 2008 char* er en peker til en char (eller et array) Som regel blir dette brukt til strings i C Det er ikke plass til en string i en char, som er en byte, men minneområdet som char* peker til, kan ha plass til det. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå