L'allocation de chaîne avec malloc

Je suis nouveau dans la programmation en C et maintenant, je suis étudiant en chaînes.
Ma question est: si j'alloue une aide de la chaîne de malloc (comme dans le code ci-dessous), est le caractère NULL automatiquement insérée à la fin de la chaîne?
Je trouve une réponse à une autre question, et il semble que le caractère NULL n'est pas automatiquement inclus.
Mais voici le problème: je sais que des fonctions comme strlen ne fonctionne pas s'il n'y a pas que le caractère NUL, et dans ce code je l'utilise et il fonctionne. Donc, je pense qu'il y a \0 à la fin de ma chaîne, même si je n'écris pas n'importe où.
Quelle est la réponse?

Voici le code:

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

int main(int argc, char** argv) {
    char *stringa1;
    int n;
    int i;

    printf("How many characters in the string? ");
    scanf("%d", &n);

    stringa1 = (char*) malloc(n*sizeof(char));

    printf("Insert the string: ");
    scanf("%s", stringa1);

    free(stringa1);

    return 0;
}
Votre code semble bien pour moi. scanf met le NUL (non NULLE) à la fin de la chaîne. Essayez d'appeler strlen juste avant free(stringa1).
Pour répéter ce que @MichaelWalz dit, et pour pinailler, un pointeur peut être NULL et un caractère peut être NUL.
Dans une version précédente, j'ai essayé et elle renvoie le nombre que j'ai mis dans le premier scanf().
Je ne vois pas de réel problème avec votre code, à l'exception de casting de la suite de malloc. Il n'a pas d'effets particulièrement négatifs ici, mais est considéré comme une mauvaise pratique et permet de cacher les erreurs.
Il n'y a pas de NULL caractère. NULL est une macro avec un null le pointeur constant, quelque chose de très différent. Et C n'a pas de type chaîne.

OriginalL'auteur FranzGoogle | 2017-01-24