[C] Problem mit den Parametern von int main()

DAmico

Mitglied
Hallo Leute,

ich habe ein Problem mit den Parametern von int main(int argc, char* argv[]).

Mein bisher geschriebenes Programm sieht folgendermaßen aus:

C++:
#include <stdio.h>

int main (int argc, char* argv[])
{
printf("Anzahl der Argumente: %d\n", argc);
printf("Pfad: %s\n", argv[0]);
 
int i = 1;
  for(; i < argc; ++i)
  
	printf("Argument %d: %s\n", i, argv[i]);
  
return 0;
}

Wenn ich das Programm nun mittels cmd ausführe, schreibt er mir untereinander die Worte des eingegebenen Satzes.
Nun möchte ich zusätzlich gerne in einer neuen Zeile ein Wort ausgeben, was sich aus den jeweils letzten Buchstaben der einzelnen eingegebenen Wörtern zusammensetzt.
Hat jemand von euch eine Idee, wie sich dieses Problem lösen ließe?

Vielen Dank im Voraus für eure Antworten.:)

Mit freundlichen Grüßen
 
Zuletzt bearbeitet von einem Moderator:
Zuerst brauchst du Platz für argc - 1 Buchstaben sowie für die endende 0. Ausserdem musst du wissen, wie lange die Zeile ist, die du gerade liest.
Code:
char* szEndings = 0;
size_t uCurLen = 0;
int i = 1;

szEndings = (char*)malloc(argc * sizeof(char));
memset(szEndings, 0, argc * sizeof(char));

while(i < argc)
{
	uCurLen = strlen(argv[i]);
	szEndings[i - 1] = argv[i][uCurLen - 1];
	++i;
}

Dann hast du in szEndings die letzten Buchstaben deiner Eingaben.
 
Hallo DAmico,

das kannst du (fast) genauso machen, wie bei der Ausgabe der Wörter. "argv" zeigt auf ein zweidimensionales Array und beim Zugriff auf die zweite Dimension kannst du die einzelnen Zeichen des Strings ansprechen:
C++:
int i = 1;
for(; i < argc; ++i)
      printf("%c", argv[i][strlen(argv[i])-1]);
printf("\n");
Für die Funktion "strlen" musst du noch string.h includen.

Gruß
MCoder
 
Vielen Dank für eure schnelle Hilfe,:)
habe eure Programme verstanden.

Eine Frage zu dem Code von MCoder:
Wie würde die Lösung aussehen, wenn man die Bibliothek <string.h> nicht benutzt?

Vielen Dank im Voraus für eure Hilfe.:)

Mit freundlichen Grüßen
 
Wie würde die Lösung aussehen, wenn man die Bibliothek <string.h> nicht benutzt?
strlen() stammt ebenso wie die anderen von dir verwendeten Funktionen aus der Standard C-Library. Mit "#include <string.h>" (wird übrigens auch von Cromons Code benötigt) wird keine neue Bibliothek eingebunden sondern nur der Funktionsname (Deklaration) bekannt gemacht.

Gruß
MCoder
 
Vielen Dank für deine schnelle Aufklärung.:)
Ich sehe, dass es mit der Funktion strlen die Problemstellung sehr vereinfacht wird,
aber leider ist die Einschränkung, dass nur <stdio.h> verwendet werden soll.

Hat dazu von euch jemand eine Idee?
Mit freundlichen Grüßen
 
Zuletzt bearbeitet:
Dann Programmier strlen doch einfach selber :)

int mystrlen(char *s){int i=0;while(*(s++))i++;return i;}

oder vielleicht ein bisschen übersichtlicher:
C++:
int mystrlen(char *string)
{
    int i=0;
    while(string[i]!='\0')
        i++;
    return i;
}
 
Wenn du unbedingt auf strlen verzichten willst, so kannst du eine eigene Funktion dafür implementieren.
http://pastebin.com/01F37gRA

Wobei du da natürlich auch noch kurz einen Blick druaf werfen solltest damit du sicher bist, dass ich nichts übersehen habe.
 
Dankeschön für eure schnelle Hilfe.

Dann müsste das Programm wie folgt aussehen:

C++:
#include <stdio.h>

int mystrlen(char *string)
{
    int i=0;
    while(string[i]!='\0')
        i++;
    return i;
}

main(int argc, char* argv[])

...

int i = 1;
for(; i < argc; ++i)
      printf("%c", argv[i][strlen(argv[i])-1]); // statt strlen(argv[i]) schreibe mystrlen(argv[i]) ?
printf("\n");

Passt das Programm soweit, wenn ich in Zeile 17 meinen Code wie angegeben ändere?

Mit freundlichen Grüßen
 
Zuletzt bearbeitet von einem Moderator:
Zurück