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?
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.
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.
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));
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));
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
string[0] = "";
0
un int: représente le nombre de caractères (en supposant questring
est (ou décomposé en) un caractère *) pour avancer à partir du début de l'objetstring
string[0]
: l'objetchar
situé au début de l'objetstring
""
: littéral de chaîne: un objet de typechar[1]
=
: opérateur d'affectation: tente d'affecter une valeur de typechar[1]
à un objet de typechar
.char[1]
(décroché enchar*
) etchar
ne sont pas compatibles avec les affectations, mais le compilateur vous fait confiance (le programmeur) et poursuit avec l'attribution en transmettant le typechar*
(auquelchar[1]
s'est abîmé) en unint
--- et vous obtenez le avertissement en bonus. Vous avez un très bon compilateur :-)
Pour ce faire, vous pouvez utiliser:
strcpy(string, "");
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.
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}