PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c frage



elaso
09-04-2005, 13:01
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

if (argc !=2)
printf ("Zu wenige Argumente,beachten sie bitte die Hilfe -h");

if (strcmp(argv[1],"cf") == 0)
printf ("Sehr Gut");

else if
printf("\n Keine gültige eingabe...");
return 0;
}

Hi ich hätte ein paar Fragen zu diesem Codeschnipsel.
Was macht die [1] bei argv.Bedeutet das das erste Argument?

mit argc bestimme ich ja die anzahl der argumente.

Meine Fagren zu meinem Pointerproblem poste ich später da ich mir noch anschaue muss wo ich da genau hängenbleib bzw. was ich da nicht verstehe.

thx :)

elaso

brother zee
09-04-2005, 13:05
Ja das ist das erste argument , in argv[0] steht der pfad aus dem
geladen wurde also z.B. C:\whatever\test.exe

anda_skoa
09-04-2005, 16:28
Ein paar generelle Anmerkungen bezogen auf das Codeschnipsel:


argc != 2

Prüft ob ungleich zwei Elemente im Array argv sind, d.h. weniger aber auch mehr.
In einem echten Programm sollte die Ausgabe das dann widerspiegeln :)

Wenn du sowas prüfst, ist es sinnvoll, es dann auch zu benutzen.

Wenn nämlich die Überprüfung mißlang, weil weniger als zwei Elemente in argv sind, würde der derzeit kurz danach erfolgenden Zugriff auf argv[1] logischerweise schief gehen.

Ciao,
_

elaso
09-04-2005, 19:13
1) Vielen dank für eure kompetente Hilfe!

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

char str[] = "ck"; /* Eingabe String - z.B. Wert von argv[] */
char string[] = "cf ck fc kc fk kf";
/* Kommandos zur Temp. Umwandlung, z.B. cf = Celsius -> Fahrenheit */

void main( void )
{
char *pdest;
int result;
printf( "String to be searched: %s\n", string );
pdest = strstr( string, str );
result = (pdest - string + 1)/3+1;
if( pdest != NULL )
printf( "%s found at position %d\n\n", str, result );
else
printf( "%s not found\n", str );
}

mit char string[] = "cf ck fc kc fk kf"; wird ein array mit eben diesen 6
charwerten initalisiert.
char str[] = "ck" <----kA was das macht.ein 2Array Feld mit ck als charwert?
mit char *pdest wird ein pointer namens pdest initialisiert.
int result initalisiert eine integer variable.
pdest = strstr( string, str )<----kA was das macht. ich weiß nur das das der Pointer pdest ist und dem was zugewiesen wird.

result = (pdest - string + 1)/3+1;
if( pdest != NULL )
printf( "%s found at position %d\n\n", str, result );
else
printf( "%s not found\n", str );

ist mir völlig unklar.

greets elaso

anda_skoa
10-04-2005, 14:41
void main( void )

int main

Im ersten Posting wars richtig :)



mit char string[] = "cf ck fc kc fk kf"; wird ein array mit eben diesen 6
charwerten initalisiert.

Nein, ein char Array wird mit diesen 17 Zeichen + '\0' initialisiert.



char str[] = "ck" <----kA was das macht.ein 2Array Feld mit ck als charwert?

Das selbe wie bei string[] nur mit zwei Zeichen.



mit char *pdest wird ein pointer namens pdest initialisiert.

Jein, deklariert und definiert, aber nicht initialisiert, denn dem Pointer wurde kein Wert zugewiesen, er zeigt also "irgendwo" hin.



int result initalisiert eine integer variable.

Siehe pdest



pdest = strstr( string, str )<----kA was das macht. ich weiß nur das das der Pointer pdest ist und dem was zugewiesen wird.

man strstr :)
strstr findet das erste Vorkommen von "str" in "string" und gibt den Pointer auf diese Position zurück.



result = (pdest - string + 1)/3+1;
if( pdest != NULL )
printf( "%s found at position %d\n\n", str, result );
else
printf( "%s not found\n", str );

Idee dabei ist, die Position von "str" in "string" numerisch als Index in gedachten Kommandoelementen (den 6 Kommandos) zu ermitteln.
Wilde Pointerarithmetik :rolleyes:

Übrigens bin ich mir nicht sicher, ob man diese Berechnung wirklich durchführen sollte, bevor man pdest != NULL geprüft hat, schließlich läßt ich nur ein Index berechnen, wenn der Suchstring auch wirklich enthalten ist.

Besser wäre zuerst auf != NULL zu prüfen und im THEN Teil des IF die Berechung durchzuführen.

Ciao,
_