Probleme mit Kommandozeilen-Parameter und -Funktionen

  • Themenstarter Themenstarter horst1231520
  • Beginndatum Beginndatum
H

horst1231520

Hi

Versuch grad ein Programm zu schreiben aber es läuft irgendwie nciht und ich find den fehler nicht
Code:
#include <stdio.h>
#define max 100

int laenge (char* wort)
{   
	int lang = 0;
	
   
	

	while (*wort)
	{lang++;
	wort++;} 

	return lang;
}
 
 

main (int argc, char *argv [])
{
	int l;
	int i;
	char *hilf[max];

	if (argc <  2) { /*Fehlen Parameter?*/
		printf ("\n Kommandozeilen Parameter fehlen");
		exit (1);
	}
	else 

	for (i=1; i<argc; i++)

		*hilf = argv[i];

l = laenge(*hilf);

		printf ("\n\nder letzte buchstabe des i%. wortes lautet: %c\n\n", i, argv[i][l]);


}

dem programm wird sein satz als kommandzeilenparameter übergeben.

nun sollen nacheinander die wörter durch die funktion laenge auf ihre länge untersucht werden und anschließend von jedem wort der letzte buchstabe ausgegeben werden.

ich denk der fehler liegt irgendwo beim übergeben von *hilf an die funktion.

hoffe mir kann jemand helfen :)
 
Moin,

Du kannst nicht einfach while (*wort) schreiben, ohne zu wissen, ob der zu dereferenzierende Zeiger gültig ist. Und dies als Bedingung zu verwenden ist grober Unfug.
Der Rest ist auch zumindest umständlich. Ich hab dir das eben mal geschrieben:
Code:
#include <stdio.h>
#include <string.h>


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

int l;
int i;
if (argc < 2) { /*Fehlen Parameter?*/
printf ("\n Kommandozeilen Parameter fehlen");
return 1;
}
else
{
for (i=1; i<argc; i++)
{

l = strlen(argv[i]);

printf ("\n\nder letzte buchstabe des %i. wortes lautet: %c\n\n", i, argv[i][l-1]);
}

}

Gruß,

badday
 
Zuletzt bearbeitet:
ja das is schön und schnell, problem ist ich darf bei der aufgabenstellung nur die bibliothek stdio.h verwenden, das vergaß ich zu erwähnen
 
Ich hab das Programm mal korrigiert

@badday: Die Bedingung ist so schon möglich; kein "grober Unfug"
Schau dir dch das Original-strlen einmal an

C++:
#include<stdio.h>

int laenge (char* wort)
{ 
    int lang = 0;
    if(!wort)
        return 0;
    while (*wort)
    {
        lang++;
        wort++;
    }
    return lang;
}

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

    if(argc < 2){
        printf ("\n Kommandozeilen Parameter fehlen");
        return 1;
    }

    for (i=1; i<argc; i++)
    {
        hilf=argv[i];
        l=laenge(hilf);
        printf ("\n\nder letzte buchstabe des %d. wortes lautet: %c\n\n", i, argv[i][l-1]);
    }
    return 0;
}

Ein bisschen knapper:
C++:
#include<stdio.h>

int laenge (char* wort)
{ 
    int lang = 0;
    while (*(wort++))
        lang++;
    return lang;
}

int main (int argc, char *argv [])
{
    int i;
    if(argc < 2)
        return 1;
    for (i=1;i<argc;i++)
        printf ("\n\nder letzte buchstabe des %d. wortes lautet: %c\n\n", i, argv[i][laenge(argv[i])-1]);
    return 0;
}
 
Zuletzt bearbeitet:
Zurück