Archiv verlassen und diese Seite im Standarddesign anzeigen : c frage
#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,
_
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,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.