web-dev-qa-db-fra.com

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é:

string[0] = ""; 

mais il a écrit

"warning: assignment makes integer from pointer without a cast"

Comment devrais-je le faire alors?

14
maayan

En supposant que votre tableau appelé 'chaîne' existe déjà, essayez

string[0] = '\0';

\0 est le terminateur NUL explicite, requis pour marquer la fin de la chaîne.

9
badgerr

Vous voulez définir le premier caractère de la chaîne à zéro, comme ceci:

char myString[10];
myString[0] = '\0';

(Ou myString[0] = 0;)

Ou, en fait, à l'initialisation, vous pouvez faire:

char myString[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.

23
Will Dean

En plus de 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));
18
Matt Joiner

calloc alloue la mémoire demandée et renvoie un pointeur sur celle-ci. Il met également à zéro la mémoire allouée.

Si vous envisagez d’utiliser votre string sous forme de chaîne vide à tout moment:

char *string = NULL;
string = (char*)calloc(1, sizeof(char));

Si vous envisagez de stocker une valeur dans votre string plus tard:

char *string = NULL;
int numberOfChars = 50; // you can use as many as you need
string = (char*)calloc(numberOfChars + 1, sizeof(char));
3
Vasilii P

L'attribution de littéraux de chaîne au tableau de caractères est autorisée uniquement pendant la déclaration:

char string[] = "";

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
3
Amarghosh
string[0] = "";
0 un int: représente le nombre de caractères (en supposant que string est (ou décomposé en) un caractère *) pour avancer à partir du début de l'objet string

string[0]: l'objet char situé au début de l'objet string

"": littéral de chaîne: un objet de type char[1]

=: opérateur d'affectation: tente d'affecter une valeur de type char[1] à un objet de type char. char[1] (décroché en char*) et char ne sont pas compatibles avec les affectations, mais le compilateur vous fait confiance (le programmeur) et poursuit avec l'attribution en transmettant le type char* (auquel char[1] s'est abîmé) en un int --- et vous obtenez le avertissement en bonus. Vous avez un très bon compilateur :-)

2
pmg

Pour ce faire, vous pouvez utiliser:

strcpy(string, "");
1
Konkret

Il 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:

string[1] = ""

Notez que ce comportement n'est pas l'émulé par strlen, qui ne compte pas le terminateur dans la longueur de la chaîne.

0
todhunter

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 string 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 string size.    
char str[5]=""; // it is look like {0, 0, 0, 0, 0} 
0
naseer mohammad