Intrebari tricky pentru interviurile C in Linux



Va prezentam de aceasta data o serie de 7 intrebari ce vizeaza limbajul de programare C, si care necesita un nivel mediu spre avansat de cunostinte.

1) Ce va afisa urmatoare portiune de cod ?
void f()
{
        char a[3] = "";
        char b[5] = "abcde";
        memcpy(a,b,3);

        printf("%s\n",a);
}

int main()
{
        f();
        return 0;
}






2) Ce afiseaza aceasta portiune de cod ?
int main()
{
   int a = 320;
   char *ptr;

   ptr =( char *)&a;
   printf("%d ",*ptr);

   return 0;
}






3) Ce afiseaza urmatoarea portiune de cod ?
int main()
{
        register int a = 2;
        int *ptr = &a;

        printf("%d ",*ptr);
        return 0;
}





4) Ce va afisa urmatoarea portiune de cod ?
void *weird(char *dest, const char *src)
{
   while(*dest++ = *src++);
}

int main()
{

        char *a = calloc(4,sizeof(char));
        char *b = calloc(4,sizeof(char));

        strcpy(b,"txt");

        weird(a,b);
        printf("%s\n",a);
        return 0;
}





5) Ce va afisa urmatoarea portiune de cod ?
int main()
{
	char arr[10];
	arr = "world";
	printf("%s",arr);
	return 0;
}





6) Ce va afisa urmatoarea portiune de cod ?
int main()
{
	char a[3] = "txt";
	char *b = malloc(strlen(a));
	strcpy(b,a);
	printf("%s\n",b);
	return 0;
}





7) Ce va afisa urmatoarea portiune de cod ?
int main()
{
        float f=0.0f;
        int i;

        for(i=0;i<10;i++)
                f = f + 0.1f;

        if(f == 1.0f)
                printf("f is 1.0 \n");
        else
                printf("f is NOT 1.0\n");

        return 0;
}







Asteptam sugestiile sau intrebarile dumneavoastra pe rubrica de comentarii.

Tags: , , , ,

V-a placut acest tutorial? Aveti anumite sugestii pentru urmatoarele tutoriale video? Lasati un comentariu! Feedback-ul vostru este foarte important pentru noi.

Pentru intrebari mai elaborate, cu caracter general, va rugam folositi forumul si in cel mai scurt timp veti primi un raspuns. Astfel ii vom ajuta si pe ceilalti sa invete din eventualele probleme.

9 comentarii la “Intrebari tricky pentru interviurile C in Linux”

  1. George Rosca says:

    Quiz-ul tau e gresit !

    1. char b[5] = “abcde”; (nu se poate asigna, array-ul e prea mic, zice la compilare) (intradevar afiseaza el abc#$W, dar nu compileaza mai intai)

    3. compileaza de fapt

    4. nu compileaza !! void *weird ar trebui sa returneze un pointer, cand de fapt nu returneaza nimic

    6. e discutabil. ar putea sa crape, ptr ca strcyp pune si 0 la sfarsit.

  2. Vlad says:

    Salut. Spre surprinderea ta, nu prea ai dreptate. Incearca sa testezi cu gcc, asta daca ai testat vreun exemplu din cele de mai sus !

    Exemplul numarul 1 este valid. GCC nici macar nu arunca un warning pentru char b[5] = “abcde” si compileaza fara probleme. Chiar si char b[5] = “abcdefghijklmn” compileaza, insa da un warning.

    Exemplul numarul 3 NU compileaza. Eroarea obtinuta este urmatoarea : error: address of register variable ‘a’ requested .

    Exemplul 4 compileaza. Din nou imi pare rau , dar se pare ca nu prea faci diferenta dintre warninguri si erori de compilare.

    Exemplul 6 nu crapa.

  3. Ionut
    says:

    Am verificat acum:

    1) Compileaza. Nu are de ce sa fie array-ul prea mic, deoarece aloca 5 octeti, iar sirul are tot 5 octeti.

    ITAssistant:Desktop$ cat 1.c
    #include <stdio.h>
    #include <string.h>

    void f(){
    char a[3] = “”;
    char b[5] = “abcde”;
    memcpy(a,b,3);

    printf(“%s\n”,a);
    }

    int main(){
    f();
    return 0;
    }
    ITAssistant:Desktop$ gcc 1.c
    ITAssistant:Desktop$ ./a.out
    abc��

    3) Nu compileaza: error: address of register variable ‘a’ requested

    ITAssistant:Desktop$ cat 3.c
    #include <stdio.h>
    #include <string.h>

    int main(){
    register int a = 2;
    int *ptr = &a;

    printf(“%d “,*ptr);
    return 0;
    }
    ITAssistant:Desktop$ gcc 3.c
    3.c: In function ‘main’:
    3.c:7: error: address of register variable ‘a’ requested

    4) Compileaza.

    ITAssistant:Desktop$ cat 4.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    void *weird(char *dest, const char *src){
    while(*dest++ = *src++);
    }

    int main(){
    char *a = calloc(3,sizeof(char));
    char *b = calloc(3,sizeof(char));
    strcpy(b,”txt”);
    weird(a,b);
    printf(“%s\n”,a);
    return 0;
    }
    ITAssistant:Desktop$ gcc 4.c
    ITAssistant:Desktop$ ./a.out
    txt

  4. George Rosca says:

    Intreba la interviuri de GCC? That’s new.
    Eu compilez cu VS de obicei.

  5. George Rosca says:

    Ok, pe GCC povestea sta altfel. In Windows, doar cateva compileaza.
    Depinde de interview :) )

    error C2117: ‘a’ : array bounds overflow
    error C4716: ‘weird’ : must return a value

  6. Vlad says:

    Multe probleme stau in compilatorul pe care il ai si mai ales in faptul ca ai Visual Studio C++.
    Spre exemplu, in C++ este legal sa folosesti operatorul & pe o variabila declarata register.
    De asemenea, am testat in Visual Studio exemplul 1 ( atentie, intr-un fisier cu extensia .c ) si a compilat. De asemenea, exemplul 3 nu a compilat, asa cum am spus si deasupra, eroarea fiind ‘error C2103: ‘&’ on register variable’ . La fel si la exemplul 4, warning-ul a fost ‘warning C4716: ‘weird’ : must return a value’.

    In concluzie, C si C++ sunt limbaje diferite !

  7. Dan says:

    Eu vad ca titlul este: Intrebari tricky pentru interviurile C in Linux. Si din cate stiam eu pe Linux se foloseste GCC :P , asa ca nu vad ce treaba are Visul Studio C++.

  8. inca_unu says:

    eu dau copy/paste din terminal (la fel si pe xterm chior dar si pe lxterminal).
    gcc = 4.6.2 pe arch

    primul cod fara string
    ——————————————————–
    #include
    void f()
    {
    char a[3] = “”;
    char b[5] = “abcde”;
    memcpy(a,b,3);

    printf(“%s\n”,a);
    }

    int main()
    {
    f();
    return 0;
    }
    —————————————
    b.c: In function ‘f’:
    b.c:7:1 warning: incompatible implicit declaration of built-in function ‘memcpy’ [enabled by default]

    OUT:
    abc

    al doilea cod cu string
    ——————————————————–
    #include
    #include
    void f()
    {
    char a[3] = “”;
    char b[5] = “abcde”;
    memcpy(a,b,3);

    printf(“%s\n”,a);
    }

    int main()
    {
    f();
    return 0;
    }
    —————————————
    OUT:
    abc

  9. Ionut
    says:

    Iti afiseaza ‘abc’ pentru ca ‘s-a intamplat‘ ca in memorie sa nu fie nimic dupa sirul a.