[C] argv[], kilka zmiennych na wejściu programu, rózna kolejność

0

Witam, mam do napisania generator haseł, algorytm już opracowałem.
Program ma się uruchamiać komendą
nazwa_programu imie=Twoje_imie nazwisko=Towje_nazwisko n=Dlugość_hasła
z założeniem, że kolejność imie, nazwisko, n może być różna

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

teraz mam pytanie jak takie zmienne są zachowywane w argv, pod adresem argv[1] będę miał pierwszą literę, czy cały ciąg znaków imie=Twoje_imie
i jak w takim przypadku wczytać do zmiennej tylko Twoje_imie, może łatwiej na wejściu będzie musiało być imie= Twoje_imie
wtedy sprawdzę zawartość argv[i] i jeśli będzie równało się imie= to wczytam zawartość argv[i+1] co radzicie?

1
#include <stdio.h>
#include <stdlib.h>

int main(int args, char* argv[]) {
    
    printf("argv[0] = %s\n", argv[0]);
    printf("argv[1] = %s\n", argv[1]);
    printf("argv[2] = %s\n", argv[2]);

    return (EXIT_SUCCESS);
}
agilob@Asus-PC:~/Projects/TestC> gcc main.c 
agilob@Asus-PC:~/Projects/TestC> ./a.out jeden dwa trzy
argv[0] = ./a.out
argv[1] = jeden
argv[2] = dwa
0

Przy: nazwa_programu imie=Twoje_imie nazwisko=Towje_nazwisko n=Dlugość_hasła
argc=4;
argv[0]="nazwa_programu";
argv[1]="imie=Twoje_imie";
argv[2]="nazwisko=Towje_nazwisko";
argv[3]="n=Dlugość_hasła";

0

if(!strcmp(argv[i],"name="))
i żadnego średnika po if

0

Witam, czy mógłby mi ktoś sprawdzić na linuxsie po skompilowaniu gcc jakie wyniki daje dla argumentów np.
n= 10 name= Jan Kowalski host= komputer
czy liczba znaków w haśle zgadza się z n i czy nie występują jakieś dziwne znaki?
Pisałem to w dev c++ i na win wszystko działa, ale po skompilowaniu na debianie działy się różne rzeczy(typu dziwne znaki i hasła miały czasami długości różniące się od n) , z tym, że nie wiem czy miałem wtedy akurat tę wersje programu czy może jakąś wcześniejsza, roboczą. Teraz nie mam dostępu do linuxa.

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(int argc, char* argv[])
{
	
	char male[]="abcdefghijkmnoprstuwxyz";
	char duze[]="ABCDEFGHJKLMNPRSTUWXYZ";
	char cyfry[]="23456789";
	char spec[]="@#$%^&*()";
	int n;
	int i;
	int ii;
	
	printf("---------------------------\n");	
	for (i=1; i<=7; i++)
	{
		if(!strcmp(argv[i],"n="))
		{
			ii=i+1;
    		n = atoi(argv[ii]);
		}	

		if(!strcmp(argv[i],"name="))
		{
			ii=i+1;
			printf("Name= %s ",argv[ii]);
			ii=ii+1;
			printf("%s\n", argv[ii]);
		}
		if(!strcmp(argv[i],"host="))
		{
		ii=i+1;
		printf("Host = %s\n", argv[ii]);
		}
	}

	if(n<8 || n>30)
		printf("Zla zmienna n");
	else 
	{
		int p,q,r,a,b,c,d;
		a=0;
		q=0;
		r=0;
		b=0;
		c=0;
		d=0;
		p=0;
	
		for (p=0; p<n; p++)
		{
			srand ( time(NULL) );
			q = (rand()+a%4+b%4+c%4+d%4+q%5)%4;
	
			if (q==0)
			{
				r=(rand()*p)%23;
				printf("%c",male[r]);
				a++;
			}
			if (q==1)
			{
				r=(rand()*p)%22;
				printf("%c",duze[r]);
				b++;
			}	
			if (q==2)
			{
				r=(rand()*p)%8;
				printf("%c",cyfry[r]);
				c++;
			}

			if (q==3)
			{
				r=(rand()*p)%9;
				printf("%c",spec[r]);
				d++;
			}
			if (p==(n-4))
			{
				if (a==0)
				{
					r=rand()%23;
					printf("%c",male[r]);
					a++;
					p++;
				}
				if (b==0)
				{
					r=rand()%22;
					printf("%c",duze[r]);
					b++;
					p++;
				}
				if (c==0)
				{
					r=rand()%8;
					printf("%c",cyfry[r]);
					c++;
					p++;

				}
				if (d==0)
    			{
					r=rand()%9;
					printf("%c",spec[r]);
					d++;
					p++;
				}
			}	
		}
	}
	printf("\n---------------------------");
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1