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

2012-11-18 22:08
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?

Rozumiem, że forum jest do zadawania pytań, ale to czy pod argv[1] będzie znak czy string to można samemu sprawdzić... - agilob 2012-11-18 22:12
można, ale działam teraz na win, nie mam kompilatora, a zadanie mam do zrobienia na jutro, dopiero instaluje linuxa, chcę po prostu wiedzieć, żeby nie zarywać całej nocki tylko mieć już jakieś pojęcie przed rozpoczęciem pracy - aro562 2012-11-18 22:17
Jest to niezależne od kompilatora i systemu operacyjnego... - agilob 2012-11-18 22:22

Pozostało 580 znaków

2012-11-18 22:23
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);
}
[email protected]:~/Projects/TestC> gcc main.c 
[email protected]:~/Projects/TestC> ./a.out jeden dwa trzy
argv[0] = ./a.out
argv[1] = jeden
argv[2] = dwa

Kiedyś miałem sen... że wszyscy ludzie zaczną używać tagów <code> i czytać błędy kompilatora...
wielkie dzięki! - aro562 2012-11-18 22:25

Pozostało 580 znaków

2012-11-18 22:25
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";


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2012-11-19 23:42
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
dzięki i sorry za zamieszanie z tym 2 postem, moj błąd - aro562 2012-11-20 00:04

Pozostało 580 znaków

2012-11-20 19:41
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---------------------------");
}
edytowany 1x, ostatnio: aro562, 2012-11-20 19:42

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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