Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Ermitteln der Größe einer EINGABE

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Anfänger
Gast





BeitragVerfasst am: 13. Jul 2002 23:23   Titel: Ermitteln der Größe einer EINGABE

Hallo ich bin noch ein Anfänger. Ich möchte zu Übungszwecken den Speicherbedarf einer Eingabe ermitteln.
Mein Anfang sieht so aus:
code:

#include <stdio.h>

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

len = sizeof(argv[1]);
printf("Das Wort ist %d bytes groß\n", len);
}



Leider bekomme ich IMMER eine Größe von vier bytes. Wie muß das Programm richtig aussehen, so das ich eingeben muß "./groesse blablabla"
und folgende Ausgabe bekomme "Das Wort ist 9 bytes groß"

danke schon mal im Voraus
 

Udo M.
Gast





BeitragVerfasst am: 14. Jul 2002 1:40   Titel: Re: Ermitteln der Größe einer EINGABE

`*argv[]' ist ein Zeiger auf ein Array mit Zeigern, `argv' ist also der 2. Zeiger in diesem Array und zeigt auf den 1. Parameter ... ja und Zeiger sind bei ix86-Linux nun mal 32 Bit groß.
Nun brauchst Du den Zeiger nicht etwa dereferenzieren, denn die Parameter sind ja Strings und die C-Funktion zur _Längenbestimmung_ eines Strings will halt solch einen Zeiger.
 

chaos
Gast





BeitragVerfasst am: 14. Jul 2002 15:02   Titel: Re: Ermitteln der Größe einer EINGABE

#include <stdio.h>
int main (int argc, char *argv[]){
int len=0;
while (*arv[len]!='\0')len++;

printf("Das Wort ist %d zeichen groß
", len);
printf("die größe eines zeichens ict implementierungsabhängig, jedoch iA 1 Byte");
return 0;
}
 

domseichter



Anmeldungsdatum: 11.02.2002
Beiträge: 57
Wohnort: Laufen

BeitragVerfasst am: 14. Jul 2002 16:29   Titel: Re: Ermitteln der Größe einer EINGABE

man strlen sollte helfen.
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Udo M.
Gast





BeitragVerfasst am: 14. Jul 2002 18:04   Titel: Re: Ermitteln der Größe einer EINGABE, GegenMichDarstellung

Klaut hier jemand Klammern? Mal probieren `argvEKauf 1 EKzu': `argv'
Tatsächlich, die Vorschau zeigt's, da steht nur noch `argv' ohne eckige Klammern mit 'ner 1 drin. Sind wohl irgendwelche Formatierungstags aktiviert ...
Ein click auf das Fragezeichen verrät mir mehr ... leider nur nicht wie man diesen Firlefanz ohne gleich [code] zu benutzen umgehen kann. Aha, also mit \.

So wird es also richtig:


`*argv[]' ist ein Zeiger auf ein Array mit Zeigern, `argv[1]' ist also der 2. Zeiger ...


Werde wohl heute schlecht schlafen können, wenn ich daran denke, einen C-Lernwilligen noch etwas falsches gezeigert zu haben. Also

*arg oder arg[0]
**arg oder *arg[0]
ist jeweils etwa das selbe. Wenn arg ein Zeiger auf ein Array ist, bekommen wir sein erstes Element mit *arg genau so wie mit arg[0].

Genug, chaos zeigt, wie schön man C lernen kann und Dominik ist eine Petze.
 

Anfänger
Gast





BeitragVerfasst am: 14. Jul 2002 19:55   Titel: Re: Ermitteln der Größe einer EINGABE

chaos,

dein Beispiel bringt bei mir IMMER einen Speicherzugriffsfehler
 

Sascha Müller
Gast





BeitragVerfasst am: 14. Jul 2002 20:10   Titel: Re: Ermitteln der Größe einer EINGABE

> dein Beispiel bringt bei mir IMMER einen Speicherzugriffsfehler

Ist auch ziemlich chaotischer Code *lol*

Versuch's mal damit:

code:

#include <stdio.h>
#include <string.h>

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

len = strlen(argv);
printf("Das Wort ist %d bytes groß
", len);
}

 

Sascha Müller
Gast





BeitragVerfasst am: 14. Jul 2002 20:13   Titel: Re: Ermitteln der Größe einer EINGABE

Oh Mann, diese besch** Board-Software!

Mein Beispiel war im wesentlichen dasselbe wie Deine Vorlage, nur hab ich statt sizeof(bla) strlen(bla) verwendet, und dazu noch string.h eingebunden. Das ist alles. die Grösse von argv(1) (ich vermeide mal die eckigen Klammern) ist in der Tat 4, weil - wie bereits erwähnt - argv(1) ein Zeiger ist, und der eben genau 32 Bits bzw. 4 Bytes braucht.

Im übrigen wird das Programm, so wie ich es geändert habe, segfaulten, wenn der Benutzer keinen Parameter eingibt. Aber wie man das checkt, findest Du sicher auch selbst raus.
 

Udo M.
Gast





BeitragVerfasst am: 14. Jul 2002 22:59   Titel: Re: Ermitteln der Größe einer EINGABE

Bei chaos nur eine eckige Klammer wieder(?) einbauen und das Sternchen dafür weg!

while( argv[1][len]!='\0')len++; // 1 für ersten Parameter u.s.w, 0 für Progname selbst

Ski Heil!
 

Jochen Kühner
Gast





BeitragVerfasst am: 15. Jul 2002 11:11   Titel: Re: Ermitteln der Größe einer EINGABE

So gehts...

#include <stdio.h>
#include <string.h>

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

for(i=1;i<argc;i++)
{
len = strlen(argv);
printf("Das Wort ist %d bytes groß", len);
}
}
 

Jochen kühner
Gast





BeitragVerfasst am: 15. Jul 2002 11:13   Titel: Re: Ermitteln der Größe einer EINGABE

nun aber....

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
int len,j;

for(j=1;j<argc;j++)
{
len = strlen(argv[j]);
printf("Das Wort ist %d bytes groß", len);
}
}
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy