Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need String initialization advice

I got an assignment for wich i have to write an program that will take the letters in the first parameter string, and find them in the second parameter string like so:

./a.out "lolabab" "ablcocllcab"

the program needs to print "loab", because each letter should only be printed once. here's the main part of my program

char    *do_stuff(char *s1, char *s2)
{
    int     i, j, k;
    char    *out;

    out = malloc(sizeof(char) * str_len(s1));
    i = 0;
    j = 0;
    k = 0;
    while (s2[j] != '\0' && s1[i] != '\0')
    {
        if (s2[j] == s1[i])
        {
            if (check_char(out, s1[i]) == 0)
            {
                out[k] = s1[i];
                k++;
            }
            i++;
            j = -1;
        }
        j++;
    }
    return (out);
}

my question is: if I dont initialize "out" i have a problem. i initialize it with malloc at the moment, but i am not allowed to use malloc :). any other way i tried, seems to not work for me (segmentation fault). So how do i initialize a string without using malloc? It's probably obvious, but i'm new at this so pls help. Thanks!

like image 247
user3747689 Avatar asked Dec 28 '25 10:12

user3747689


1 Answers

You can always pass the output buffer as a parameter

void do_stuff(char *s1, char *s2, char *out /* some large enough char [] */)
{
    int     i, j, k;

    i = 0;
    j = 0;
    k = 0;
    while (s2[j] != '\0' && s1[i] != '\0')
    {
        if (s2[j] == s1[i])
        {
            if (check_char(out, s1[i]) == 0)
            {
                out[k] = s1[i];
                k++;
            }
            i++;
            j = -1;
        }
        j++;

    }
}

and in the calling function

char result[SOME_REASONABLE_SIZE] = {0} /* initialize it for the check_char function */;
do_stuff(argv[1], argv[2], result);

you should check that the function recieved the 2 arguments of course.

One more thing, try not to use strlen in the check char function, pass the current string length k to it, that way your program would be more efficient.

like image 106
Iharob Al Asimi Avatar answered Dec 31 '25 00:12

Iharob Al Asimi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!