Je veux initialiser la chaîne en C pour vider la chaîne. J’ai essayé:
ssortingng[0] = "";
mais il a écrit
"warning: assignment makes integer from pointer without a cast"
Comment devrais-je le faire alors?
En supposant que votre tableau appelé ‘chaîne’ existe déjà, essayez
ssortingng[0] = '\0';
\0
est le terminateur NUL explicite, requirejs pour marquer la fin de la chaîne.
Vous voulez définir le premier caractère de la chaîne à zéro, comme ceci:
char mySsortingng[10]; mySsortingng[0] = '\0';
(Ou mySsortingng[0] = 0;
)
Ou, en fait, lors de l’initialisation, vous pouvez faire:
char mySsortingng[10] = "";
Mais ce n’est pas une façon générale de définir une chaîne à la longueur zéro une fois qu’elle a été définie.
Outre la version de Will Dean, les éléments suivants sont communs à l’initialisation de la mémoire tampon:
char s[10] = {'\0'};
ou
char s[10]; memset(s, '\0', sizeof(s));
ou
char s[10]; strncpy(s, "", sizeof(s));
L’atsortingbution de littéraux de chaîne au tableau de caractères est autorisée uniquement pendant la déclaration:
char ssortingng[] = "";
Ceci déclare une chaîne en tant que tableau de caractères de taille 1 et l’initialise avec \0
.
Essayez ceci aussi:
char str1[] = ""; char str2[5] = ""; printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5
calloc
alloue la mémoire demandée et lui renvoie un pointeur. Il met également à zéro la mémoire allouée.
Si vous envisagez d’utiliser votre ssortingng
tant que chaîne vide tout le temps:
char *ssortingng = NULL; ssortingng = (char*)calloc(1, sizeof(char));
Si vous envisagez de stocker une valeur dans votre ssortingng
ultérieurement:
char *ssortingng = NULL; int numberOfChars = 50; // you can use as many as you need ssortingng = (char*)calloc(numberOfChars + 1, sizeof(char));
ssortingng[0] = "";
"warning: l'affectation crée un entier à partir d'un pointeur sans transtypage
Ok, plongons dans l’expression …
0
un entier: représente le nombre de caractères (en supposant que la ssortingng
est (ou décomposée dans) un caractère *) pour avancer depuis le début de la ssortingng
object
ssortingng[0]
: l’object char
situé au début de l’object ssortingng
""
: littéral de chaîne: object de type char[1]
=
: opérateur d’affectation: tente d’affecter une valeur de type char[1]
à un object de type char
. char[1]
(décomposé en char*
) et char
ne sont pas compatibles avec les affectations, mais le compilateur vous fait confiance (le programmeur) et poursuit néanmoins l’affectation en transmettant le type char*
(auquel char[1]
désintègre) en un int
— et vous obtenez l’avertissement en bonus. Vous avez un très bon compilateur 🙂
Je pense qu’Amarghosh a répondu correctement. Si vous voulez initialiser une chaîne vide (sans connaître la taille), le meilleur moyen est:
//this will create an empty ssortingng without no memory allocation. char str[]="";// it is look like {0}
Mais si vous voulez initialiser une chaîne avec une allocation de mémoire fixe, vous pouvez faire:
// this is better if you know your ssortingng size. char str[5]=""; // it is look like {0, 0, 0, 0, 0}
C’est un peu tard, mais je pense que votre problème est peut-être que vous avez créé un tableau de longueur nulle, plutôt qu’un tableau de longueur 1.
Une chaîne est une série de caractères suivie d’un terminateur de chaîne ( '\0'
). Une chaîne vide ( ""
) ne contient aucun caractère suivi d’un seul caractère de fin de chaîne, c’est-à-dire un caractère au total.
Je voudrais donc essayer ce qui suit:
ssortingng[1] = ""
Notez que ce comportement n’est pas émulé par strlen
, qui ne compte pas le terminateur dans la longueur de la chaîne.