L'attribution char tableau d'une valeur dans C
Quelle est la différence entre:
char fast_car[15]="Bugatti";
et
char fast_car[15];
fast_car="Bugatti";
Parce que la deuxième des résultats avec une erreur de compilation:
error: incompatible types lors de l'attribution to type ‘char[15] " de type
‘char *’
Tandis que le premier fonctionne très bien. Mettre une chaîne de caractères en tableau dans différents endroit de la matrice de l'initialisation serait utile.
Vous pouvez utiliser une fonction de chaîne comme
N'utilisez pas de
il silencieusement tronque la chaîne. C'est très rarement ce que vous voulez. En outre, en tronquant il ne met pas fin à la chaîne. Voir par exemple ici.
Dans de nombreux cas, un tronc de chaîne est mieux qu'un dépassement de la mémoire tampon (à condition que vous avez bien mis l'octet nul final). Combien de critique de sécurité, bugs savez-vous qui sont le résultat d'un tronc de chaîne? Bien sûr, il est encore mieux de ne pas introduire des bogues à tous, mais nous savons tous que cela n'arrivera pas. La vraie solution est d'utiliser une meilleure chaîne de la bibliothèque de la C stdlib.
snprintf
ou strncpy
remplir le tableau avec une nouvelle valeurN'utilisez pas de
strncpy
sauf si vous êtes vraiment vraiment vraiment certain de ce que vous voulez. Assurez-vous que le tampon est assez grand et l'utilisation strcpy
à la place.il silencieusement tronque la chaîne. C'est très rarement ce que vous voulez. En outre, en tronquant il ne met pas fin à la chaîne. Voir par exemple ici.
strncpy
n'est certainement pas pire que strcpy
sécurité-sage. Bien sûr, vous devez être sûr de ce que vous faites dans les deux cas.Dans de nombreux cas, un tronc de chaîne est mieux qu'un dépassement de la mémoire tampon (à condition que vous avez bien mis l'octet nul final). Combien de critique de sécurité, bugs savez-vous qui sont le résultat d'un tronc de chaîne? Bien sûr, il est encore mieux de ne pas introduire des bogues à tous, mais nous savons tous que cela n'arrivera pas. La vraie solution est d'utiliser une meilleure chaîne de la bibliothèque de la C stdlib.
OriginalL'auteur hardpenguin | 2012-08-28
Vous devez vous connecter pour publier un commentaire.
Le premier est un initialisation tandis que le second est un affectation. Comme les tableaux ne sont pas modifiables valeurs dans C vous ne pouvez pas affecter de nouvelles valeurs.
Rappelez-vous, vous pouvez modifier le contenu du tableau, vous ne pouvez pas dire
fast_car = ...
. Si le contenu est modifiable, les tableaux eux-mêmes ne sont pas.En utilisant le même symbole
=
pour ces très différents concepts de valeur discutable.str_replace("modifiable", "mutable");
😉Chaîne de substitution, n'est en fait pas aussi simple que ça en C 😉
pouvez-vous suggérer une autre solution? C'est à propos de les attribuer manuellement quelques variables de tableau de la structure. À l'aide du pointeur de char fonctionne, mais n'est-ce pas une mauvaise solution pour la gestion de la mémoire?
En outre, une raison que l'initialisation peut définir un tableau d'ensemble de la chaîne et de l'affectation ne peut pas, c'est que l'initialisation est réalisée par le stockage de données image exécutable, où il “naturellement” forme une partie de la mémoire du programme, lorsqu'il est chargé. Il ne cause pas au moment de l'exécution des opérations au-delà de chargement du programme. En revanche, la cession nécessite des opérations de copie, et c'est un plus d'implication que le C a été conçu à l'origine pour.
Vous pouvez utiliser
strcpy
, utiliser des pointeurs etc. Dépend de la nature des données et le traitement se fait.OriginalL'auteur cnicutar
Il dit fast_car est un tableau et être initialisé avec une chaîne de la "Buratti". Utilisation Correcte :
La première ligne est une déclaration de char array(non initialisé). Deuxièmement, fast_car ici est juste une adresse(un pointeur) du premier élément de ce tableau de char. L'affectation de pointeur fast_car à un tableau de char "Buratti" est incorrect par type de différence de valeur.
OriginalL'auteur ducanhng