wątpliwości z memcpy

0

Hej! Piszę program, który przyjmuje 2 ciągi bitów w postaci łancuchow znakowych i musi je wyrownywac do tej samej dlugosci uzupelniajac odpowiednio zerami. Gdy 1 liczba jest dluzsza od drugiej wszystko działa ok, ale gdy 2 łancuch jest dluzszy, pierwszy zmienia się w porządku natomiast drugi całkowicie znika, podejrzewam, że jest to problem z funkcją memcpy, czy używam jej w zly sposob? Gdzies widzialam przyklad, w którym wydaje mi sie była podobnie użyta i mam już mętlik w głowie. Prosze o pomoc!
Oto kod:

int main(int argc, char *argv[])
{
    int i=0;
    int a = strlen(argv[1]);
    int b = strlen(argv[2]);
    if (a>b)
    {
        int c = a - b;
        char temp[c + 1];
        while (i < c)
        {
            temp[i] = '0';
            i++;
        }
        temp[c] = '\0';
        char help[b+1+c];
        help[b + c] = '\0';
        strcpy(help, temp);
        strcat(help, argv[2]);
        memcpy(argv[2], help, (b + c + 1));
 
    }
    if (b > a)
    {
        i = 0;
        int c = b-a;
        char temp[c + 1];
        while (i < c)
        {
            temp[i] = '0';
            i++;
        }
        temp[c] = '\0';
        char help[a + 1 + c];
        help[a + c] = '\0';
        strcpy(help, temp);
        strcat(help, argv[1]);
        memcpy(argv[1], help, (a + c + 1));
    }
printf("lancuch nr 1. : %s\nlancuch nr 2. : %s", argv[1], argv[2]);
 
return 0;
}
1

Nadpisujesz bufor argumentu programu większą ilością znaków. To co robisz to w najlepszym wypadku implementation-defined behavior, ale na moje oko to po prostu UB, W tym przypadku oba stringi są umieszczone w pamięci w pobliżu siebie i nadpisując pierwszy, nadpisujesz też drugi.

0

Okay, czyli jednak :/ Dziękuję serdecznie!

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