Je veux initialiser la chaîne en C pour la chaîne vide. Je essayé:Initialiser une chaîne en C pour vider la chaîne
string[0] = "";
mais il écrit
"warning: assignment makes integer from pointer without a cast"
Comment dois-je faire alors?
Je veux initialiser la chaîne en C pour la chaîne vide. Je essayé:Initialiser une chaîne en C pour vider la chaîne
string[0] = "";
mais il écrit
"warning: assignment makes integer from pointer without a cast"
Comment dois-je faire alors?
En supposant que votre tableau appelé 'string' existe déjà, essayez
string[0] = '\0';
\0
est la terminaison NUL explicite, nécessaire pour marquer la fin de la chaîne.
Semnatically, cela devrait être 'string [0] = '\ 0';' ... –
@badgerr: pourriez-vous changer votre réponse pour utiliser ''\ 0''? – pevik
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, lors de l'initialisation, vous pouvez faire:
char myString[10] = "";
Mais ce n'est pas une manière générale de définir une chaîne à zéro une fois qu'elle a été définie.
Attribution littéraux de chaîne char tableau est autorisée uniquement pendant la déclaration:
char string[] = "";
Cette chaîne comme déclare tableau de caractères de taille 1 et initialise avec \0
.
Essayez cela aussi:
char str1[] = "";
char str2[5] = "";
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5
En plus de la version de Will Dean, les éléments suivants sont communs pour toute l'initialisation du tampon:
char s[10] = {'\0'};
ou
char s[10];
memset(s, '\0', sizeof(s));
ou
char s[10];
strncpy(s, "", sizeof(s));
string[0] = "";
"warning: assignment makes integer from pointer without a cast
Ok, nous allons plonger dans l'expression ...
0
un int: représente le nombre de caractères (en supposant que string
est (ou pourris dans) un char *) pour faire avancer à partir du début de l'objet string
string[0]
: l'objet char
situé au début de la objet string
""
: chaîne littérale: un objet de type char[1]
=
: opérateur d'affectation: essais pour affecter une valeur de type char[1]
à un objet de type char
. char[1]
(cariées à char*
) et char
ne sont pas compatibles cession, mais les fiducies de compilateur (le programmeur) et va de l'avant avec la cession de toute façon par coulée du type char*
(ce char[1]
à pourris) à un int
--- et vous obtenez la avertissement en bonus. Vous avez un très bon compilateur :-)
calloc
alloue la mémoire demandée et lui renvoie un pointeur. Il définit également la mémoire allouée à zéro.
Si vous prévoyez d'utiliser votre string
en tant que chaîne vide tout le temps:
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));
Je pense Amarghosh a répondu correctement. Si vous voulez initialiser une chaîne vide (sans connaître la taille) la meilleure façon 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 que vous pouvez faire:
// this is better if you know your string size.
char str[5]=""; // it is look like {0, 0, 0, 0, 0}
Il est un peu en retard mais je pense que votre problème peut être que vous avez créé un tableau de longueur zéro, plutôt qu'un tableau de longueur 1.
Une chaîne est une série de caractères suivie d'une terminaison de chaîne ('\0'
). Une chaîne vide (""
) ne comporte aucun caractère suivi d'un seul caractère de terminaison de chaîne, c'est-à-dire un caractère au total.
donc je les opérations suivantes:
string[1] = ""
Notez que ce comportement n'est pas le émulé par strlen
, qui ne compte pas la terminaison dans le cadre de la longueur de la chaîne.
À quoi sert de déclarer une chaîne de 0 caractères? – cdhowie
Quel est le type de votre 'chaîne'? Est-ce un pointeur char ou un tableau char? – nos
Qu'est-ce que 'string'? – leppie