Initialiser une chaîne en C pour vider une chaîne

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.