152 votes

Initialisation du tableau de chars en C

Je ne suis pas sûr de ce qui se trouvera dans le tableau de chars après l'initialisation de la manière suivante.

1. char buf[10] = "";
2. char buf[10] = " ";
3. char buf[10] = "a";

Pour le cas 2, je pense buf[0] devrait être ' ' , buf[1] devrait être '\0' et de buf[2] à buf[9] sera un contenu aléatoire. Pour le cas 3, je pense buf[0] devrait être 'a' , buf[1] devrait être \0 ', et de buf[2] à buf[9] sera un contenu aléatoire.

Est-ce exact ?

Et pour le cas 1, qu'est-ce qu'il y aura dans les buf ? buf[0] == '\0' et de buf[1] à buf[9] sera un contenu aléatoire ?

1voto

Erric Rapsing Points 11

Je ne suis pas sûr, mais j'ai l'habitude d'initialiser un tableau à "". dans ce cas, je n'ai pas à me soucier de la fin nulle de la chaîne.

main() {
    void something(char[]);
    char s[100] = "";

    something(s);
    printf("%s", s);
}

void something(char s[]) {
    // ... do something, pass the output to s
    // no need to add s[i] = '\0'; because all unused slot is already set to '\0'
}

-1voto

mrigendra Points 1288

J'utilise le format ci-dessous lorsque j'utilise des chaînes de caractères, etc.

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

void func(char *str)
{
       char str1[50]={'\0'};
       int length=0;           

       if ((strlen(str) + 1) > 50)
                fprintf(stderr, "string too long\n");
       else if (str == NULL)
                fprintf(stderr, "Invalid pointer\n");
       else {
                memcpy(str1, str, strlen(str) + 1);
                if(*str1 == '\0' )
                        fprintf(stderr, "Invalid string\n");
                else         
                        printf("--> %s\n", str1);

                memset(str1 ,'\0' , strlen(str1) + 1);
                str=NULL;
       }
}

int main()
{
        func("this is my string");
        return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X