Ermitteln der Größe einer EINGABE

Post Reply
Message
Author
Anfänger

Ermitteln der Größe einer EINGABE

#1 Post by Anfänger »

Hallo ich bin noch ein Anfänger. Ich möchte zu Übungszwecken den Speicherbedarf einer Eingabe ermitteln.
Mein Anfang sieht so aus:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <stdio.h>

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

len = sizeof(argv[<!--no-->1<!--no-->]);
printf("Das Wort ist %d bytes groß\<!--no-->n", len);
}
</font><hr></pre></blockquote>

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.

Re: Ermitteln der Größe einer EINGABE

#2 Post by Udo M. »

`*argv[]' ist ein Zeiger auf ein Array mit Zeigern, `argv<font size="1">' 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

Re: Ermitteln der Größe einer EINGABE

#3 Post by chaos »

#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
Posts: 57
Joined: 11. Feb 2002 22:08
Location: Laufen
Contact:

Re: Ermitteln der Größe einer EINGABE

#4 Post by domseichter »

man strlen sollte helfen.

Udo M.

Re: Ermitteln der Größe einer EINGABE, GegenMichDarstellung

#5 Post by Udo M. »

Klaut hier jemand Klammern? Mal probieren `argvEKauf 1 EKzu': `argv<font size="1">'<font size="2">
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 [<!--no-->code<!--no-->] zu benutzen umgehen kann. Aha, also mit \<!--no-->.

So wird es also richtig:<blockquote><hr>
`*argv[<!--no--><!--no-->]' ist ein Zeiger auf ein Array mit Zeigern, `argv[<!--no-->1<!--no-->]' ist also der 2. Zeiger ...
<hr></blockquote>
Werde wohl heute schlecht schlafen können, wenn ich daran denke, einen C-Lernwilligen noch etwas falsches <b>gezeigert</b> zu haben. Also<pre>
*arg oder arg[<!--no-->0<!--no-->]
**arg oder *arg[<!--no-->0<!--no-->]
</pre> ist jeweils etwa das selbe. Wenn <font face="Courier New">arg</font><!--fixed--> ein Zeiger auf ein Array ist, bekommen wir sein erstes Element mit <font face="Courier New">*arg</font><!--fixed--> genau so wie mit <font face="Courier New">arg[<!--no-->0<!--no-->]</font><!--fixed-->.

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

Anfänger

Re: Ermitteln der Größe einer EINGABE

#6 Post by Anfänger »

chaos,

dein Beispiel bringt bei mir IMMER einen Speicherzugriffsfehler

Sascha Müller

Re: Ermitteln der Größe einer EINGABE

#7 Post by Sascha Müller »

> dein Beispiel bringt bei mir IMMER einen Speicherzugriffsfehler

Ist auch ziemlich chaotischer Code *lol*

Versuch's mal damit:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <stdio.h>
#include <string.h>

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

len = strlen(argv<font size="1">);
printf("Das Wort ist %d bytes groß
", len);
}
</font><hr></pre></blockquote>

Sascha Müller

Re: Ermitteln der Größe einer EINGABE

#8 Post by Sascha Müller »

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.

Re: Ermitteln der Größe einer EINGABE

#9 Post by Udo M. »

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

<font face="Courier New">while( argv[<!--no-->1<!--no-->][<!--no-->len<!--no-->]!='\0')len++; // 1 für ersten Parameter u.s.w, 0 für Progname selbst<font face="Courier New">

Ski Heil!

Jochen Kühner

Re: Ermitteln der Größe einer EINGABE

#10 Post by Jochen Kühner »

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<i>);
printf("Das Wort ist %d bytes groß", len);
}
}

Jochen kühner

Re: Ermitteln der Größe einer EINGABE

#11 Post by Jochen kühner »

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);
}
}

Post Reply