Przypisanie komórek tablicy znakowej, do zmiennej znakowej.

0

Witam, mam następujący problem w C, otóż chcę przypisać do zmiennej znakowej, kilka komórek z różnych tablic znakowych np.:


char *dni[] = {"pon","wt","sr","czw","pt","sb","nd"};
char *numery[] = {"pierwszy","drugi","trzeci","czwarty","piaty","szosty","siodmy"};
char *osoby[] = {"ada","ola","as"};

char zmienna[] = "";

zmienna = dni[1] + numery[5] + osoby[0];

chcę zrobić dokładnie coś takiego jak powyżej, tyle, że w C to nie działa.

0

Dziękuję za pomoc, ale odnośnie tablic znakowych, to mam do napisania program, który zamienia liczby na postać słowną z zachowanie gramatyki, z tego względu chciałem przerobić program z php, znajdujący się

http://www.algorytm.org/inne/zamiana-liczby-na-slowa-z-polska-gramatyka/zlns-gramatyka-1-php.html
na język C i oto co mi wyszło:

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

char zamiana(unsigned long x);

int main(void)
{
    unsigned long x;

    int result = scanf("%lu", &x);

    if (result != 1) exit(0);
    else if (x == 0) printf("\nzero\n");
    else printf("%s",zamiana(x));

    return 0;
}
char zamiana(unsigned long x)
{
    const char *jed[] = {"","jeden","dwa","trzy","cztery","piec","szesc","siedem","osiem","dziewiec"};
    const char *nas[] = {"","jedenascie","dwanascie","trzynascie","czternascie","pietnascie","szesnascie","siedemnascie","osiemnascie","dziewietnascie"};
    const char *dzi[] = {"","dziesiec","dwadziescia","trzydziesci","czterdziesci","piecdziesiat","szescdziesiat","siedemdziesiat","osiemdziesiat","dziewiecdziesiat"};
    const char *set[] = {"","sto","dwiescie","trzysta","czterysta","piecset","szescset","siedemset","osiemset","dziewiecset"};
    const char *tmm[][4] = {
        {"","","",""},
        {"","tysiac","tysiace","tysiecy"},
        {"","milion","miliony","milionow"},
        {"","miliard","miliardy","miliardow"}
    };
    char wynik[1000];
    int s,n,d,j,k,g=0;

    while (x>0)
    {
        s = (x%1000)/100;
        n = 0;
        d = (x%100)/10;
        j = x%10;


        if (d == 1 && j>0)
        {
            n = j;
            d = 0;
            j = 0;
        }

        k = 2;
        if (j == 1 && s+d+n == 0)
            k = 0;
        if (j == 2 || j == 3 || j == 4)
            k = 1;

        if (s+d+n+j > 0)
        {
            strcat(wynik, set[s]);
            strcat(wynik, dzi[d]);
            strcat(wynik, nas[n]);
            strcat(wynik, jed[j]);
            strcat(wynik, tmm[g][k]);
        }

        g++;
        x = x/1000;
    }

    return *wynik;
}

tyle że na końcu wyskakuję błąd windowsowski i nie wiem co dalej.

0

W c są dwie główne metody zwracania tablicy znaków, jedną z nich jest stworzenie nowej za pomocą malloca o odpowiedniej wielkości, drugą jest wpisanie wyniku do tablicy podanej jako parametr (plus dodatkowy parametr określający wielkość tej tablicy, nie przykładaj się do wzrostu ilości występowania buffer overflow, jest ich już wystarczająco dużo w istniejących programach). Ty teraz po prostu zwracasz pierwszy znak tablicy wyraz.

Dodatkowo tablica wyraz jest niezainicjowana, więc strcat dopisuje drugi argument gdzieś na stosie, gdzie akurat dany bajt jest równy 0.

Edit: A błąd windowsowski pochodzi z tego, że próbujesz traktować znak jako adres (wskaźnik) w printfie, co powoduje ładnego segfaulta. KOMPILUJ Z OSTRZEŻENIAMI.

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