Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Pointer problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.02.2004, 11:18 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Ich möchte ein Programm schreiben welches alle Argumente auslist
./test -a1 x1 x2 -a2 x3
Ausgabe sollte dann so aussehen:
x1,x2
x3
Nur leider häng ich schon am Anfang

C++:
#include <stdio.h>
#define BUFFER 1024

char buffer[BUFFER];
unsigned left = BUFFER;
void getpart(char **start, char **end);

int main(int argc, char *argv[])
{
   int i;
   char **c; char **start; char **end;

   c = argv; /*erstes*/
   start = c;    

   *c = *(c + 2); /*drittes*/
   end = c;
    
   getpart(start,end);
  
   return 0;
}

void getpart(char **start, char **end)
{
   printf("Anfang \"%s\" Ende \"%s\"\n",*start, *end);
   if(*start == *end) /*Zeigen auf das gleiche Element*/
      printf("FEHLER\n");

   size_t len;
   while(**start != **end)
   {
      len = left - strlen(*start)+1;
      left =- len;
      strncat(*start,buffer,len);
      *start = *(start + 1);
      
      printf("PART %s\n",*start);
   }
}


c in main zeigt anscheinend auf die richtigen Element printf("%s",*c) zeigt immer das Richtige an. Nur in getpart stimmt nix mehr. Da zeigt dann start und end beide auf end .
Eine Frage hätte ich noch:
char **c;
Welchen Datentyp ist c?

Danke im Voraus!!!!
mfg
--

Dieser Post wurde am 24.02.2004 um 11:19 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.02.2004, 11:54 Uhr
mike
Pinguinhüpfer
(Operator)


Hmm. Wenn ich c verändere verändert sich auch alles was drauf zeigt hum
int main:
c* 0xbfbfed10
c** 0x2e
argv* 0xbfbfed10
start* 0xbfbfed10
start** 0x2e
argv[0]* 0x2e

*c = *(c + 2);
end = c;

c* 0xbfbfed19
c** 0x62
argv* 0xbfbfed19
end* 0xbfbfed19
end** 0x62
argv[2]* 0x62

in getpart:
start* 0xbfbfed19
start** 0x62
end* 0xbfbfed19
end** 0x62

Ok. Jetzt fängst allmälich zum dämmern an :P

Aber wie kann ich jetzt einen Start und End Pointer übergeben? Der Start soll auf das erste Element zeigen und der End auf das letzte Element.
--

Dieser Post wurde am 24.02.2004 um 12:08 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.02.2004, 12:18 Uhr
Pablo
Supertux
(Operator)



C++:
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
   // ohne Fehlererkennnung
   int i;
   char c;
   for(i=1; i<argc; ++i) {
        if(argv[i][0]=='-' && argv[i][1]=='a' ) {argv[i]++;argv[i]++;c='\n';} else c='  ';
        printf("%s% c", argv[i], c);
   }
   printf("\n");
   return 0;
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 24.02.2004 um 12:52 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.02.2004, 12:31 Uhr
mike
Pinguinhüpfer
(Operator)


Vielen Dank für dein Sample. Es funktioniert jetzt soweit. Ich werds jetzt nochmal mit diesen Pointern versuchen, dann hab ich die Übung des Kapitels schätzungsweise geschafft *g*

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.02.2004, 12:50 Uhr
Pablo
Supertux
(Operator)


Von deinem Code verstehe ich etwas nicht. Warum springst du von ersten Argument zum dritten (ich meine erstem nach argv[0])? Gibt es ein bestimmtes Format für deine Argumente?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.02.2004, 14:01 Uhr
mike
Pinguinhüpfer
(Operator)


EIn kleiner Fehler war. Das Programm schaut so aus:
./test -a1 x1 x2 -a2 x3

C++:
c = argv; /*initialisieren*/

*c = *(c + 1); /*erstes*/
start = c;

*c = *(c + 3); /*drittes*/
end = c;



Beim ersten mal zeigt c auf -a1 und beim zweiten Mal auf x2. Das passt soweit. Nur das Problem ist, sobald ich c ändere, ändert sich auch start. Also ist bei der zweiten Zuweisung start gleich end.
Ziel der Übung war es, mit hilfe des Anfangs und Enpointers und mit Hilfe einer Funktion (getpart) den Buffer zu füllen. Das heißt, getpart hätte in den Buffer x1, x2 schreiben sollen (-a1 sollte ignoriert werden).

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.02.2004, 17:42 Uhr
mike
Pinguinhüpfer
(Operator)


So. Ich hab jetzt deine Version als Vorlage verwendet

C++:
#include <stdio.h>

int main(int argc, char *argv[])
{
   int i;
   char **c;

   c = argv; /*initialisieren*/
   for(i=1; i < argc; i++)
   {
      *c = *(c + i);  
      printf("%s%c",(**c == '-' ? "" : *c),(**c == '-' ? '\n' : ' '));      
   }
    
   printf("\n");
  
   return 0;
}


Eine abschließend Frage hätte ich noch: Welchen Datentyp hat die Variable C?
[/b]char **c[/b]

Danke im Voraus!!!
mfg
--

Dieser Post wurde am 25.02.2004 um 18:12 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.02.2004, 18:20 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


beefy würde es vermutlich so vorziehen

C++:
#include <stdio.h>
int main(int argc, char *argv[]){
   for(char** c=argv+1; *c;++c)
       printf("%s%c",(**c == '-' ? "" : *c),(**c == '-' ? '\n' : ' '));      
printf("\n");
return 0;
}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 25.02.2004 um 18:27 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.02.2004, 18:46 Uhr
mike
Pinguinhüpfer
(Operator)


Das ist aber kein ASNI C :P
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
25.02.2004, 20:35 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
#include <stdio.h>
int main(int argc, char *argv[]){
   char** c=argv+1;
   for(; *c;++c)
       printf("%s%c",(**c == '-' ? "" : *c),(**c == '-' ? '\n' : ' '));      
printf("\n");
return 0;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: