Sortowanie argumentów

0

Witam, mam problem z programem. Otóż mam napisać program, który będzie wczytywał z wiersza poleceń argumenty będące słowami, a następnie uszereguje je alfabetycznie. Doszedłem do czegoś takiego, i nie wiem czemu program nie działa. Proszę o pomoc, pozdrawiam.

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

    int i;
	char temp;

    for(i = 1; i < argc; i++)
	{
	if (strcmp (argv[i], argv[i+1]) > 0)
	{
	strcpy(temp, argv[i]);
	strcpy(argv[i], argv[i+1]);
	strcpy(argv[i+1] , temp);
	}
	}
	
	for(i = 1; i < argc; i++)
	printf("%s\n", argv[i]);
   

    
   getchar();
   return 0;
}
 
0

char to pojedynczy znak, nie możesz skopiować do niego łańcucha. Jednym z rozwiązań jest char temp[100]. A tak w ogóle nie jest to bezpieczne rozwiązanie. Zobacz, co stanie się w takim przypadku:

#include <stdio.h>
#include <string.h>

int main(int argc, char** argv) {
    char tmp[100];
    strcpy(tmp, argv[1]);
    strcpy(argv[1], argv[2]);
    strcpy(argv[2], tmp);
    
    printf("%s\n%s\n", argv[1], argv[2]);
    
    return 0;
}

Wywołaj program: .\test a qwerty i sprawdź co się stanie.

Pomijając to, że twój algorytm nie sortuje. ;)

0

ok wszystko działa chba, jeszcze raz dzięki wielkie za pomoc

0

Pozwoliłem sobie sformatować twój kod tak, żeby nie wybijał oczu oraz dodałem komentarze, powinny pomóc:

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

    /* PO CO ten warunek? Przeciez program posortuje dowolna liczbe parametrow, np. 2 albo 4 */
    if (argc != 4) {
        printf("Aby program dzialal musisz podac 3 argumenty!");
        return 1;
    }

    int i, j;
    char temp[20]; /* tutaj ma byc WSKAZNIK na char, a nie tablica, czyli char* temp */

    /* nie chcesz uwzgledniac nazwy programu to dlaczego uwzgledniasz ja w sortowaniu?
       Zacznij petle od 1 i po sprawie. */
    for(i = 0; i < argc; i++) {
        for(j = 1; j < argc-1; j++) {
            if (strcmp(argv[j], argv[j+1]) > 0) {
                *temp = argv[j]; /* Tutaj jest powazny blad przez ktory zapewne masz smieci. zastanow sie jaki... */
                argv[j] = argv[j+1];
                argv[j+1] = temp; /* ...spojrzenie na te PRAWIDLOWA linijke powinno pomoc ;) */
            }
        }
    }

    for(i = 1; i < argc; i++)
        printf("%s ", argv[i]);

    return 0;
}
0

poprawiłem wszystko, działa, dzięki za pomoc

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