Attribuer chaîne à l'élément de structure en C
J'ai cette structure:
typedef struct SM_DB
{
LIST_TYPE link;
char name[SM_NAME_SIZE];
} SM_DB_TYPE;
Et je voudrais assigner une corde à son "nom". Je fais comme ceci:
SM_DB_TYPE one;
one.name = "Alpha";
Cependant, après la compilation, j'obtiens une erreur: "erreur C2106: '=' : l'opérande gauche doit être l-valeur". J'espère que c'est assez évident. Personne ne sait ce que je fais de mal?
Grâce
Vous ne pouvez pas affecter des chaînes à des tableaux de char.
Vous pouvez, mais il doit être tout à la fois, c'est à dire
Vous pouvez, mais il doit être tout à la fois, c'est à dire
char name[SM_NAME_SIZE] = "Alpha";
OriginalL'auteur Kreuzade | 2012-08-29
Vous devez vous connecter pour publier un commentaire.
En supposant
SM_NAME_SIZE
est assez grand, vous pouvez simplement utiliserstrcpy
comme suit:strcpy(one.name, "Alpha");
Assurez-vous que votre destination dispose de suffisamment d'espace pour contenir la chaîne avant de faire strcpy votre vous obtiendrez un dépassement de la mémoire tampon.
Si vous voulez jouer la sécurité, vous pourriez faire
Assurez-vous de libérer
one.name
si à l'aide de malloc, de sorte que vous ne perdez pas la mémoire.OriginalL'auteur Keith Miller
Vous pouvez attribuer de la valeur à la chaîne seule, tout en déclarant qu'il. Vous ne pouvez pas assigner ultérieurement en utilisant
=
.Vous devez utiliser
strcpy()
fonction.OriginalL'auteur Sachin Mhetre
Utilisation
strcpy
oustrncpy
pour affecter des chaînes de caractères en C.Ou, si vous connaissez la longueur de la chaîne source, utilisez
memmove()
oumemcpy()
— et si vous ne connaissez pas la longueur de la chaîne source, comment savez-vous qu'il est sécuritaire d'copie de la chaîne dans la cible.OriginalL'auteur P.P.
C n'a pas construit dans le type de chaîne. Vous devez utiliser un tableau de caractères pour stocker la chaîne.
Depuis C ne permet pas non plus à l'affectation d'un tableau à un autre, vous devez utiliser les différentes fonctions de la Bibliothèque Standard C pour copier des éléments d'un tableau à partir d'un tableau à l'autre, ou que vous avez à écrire une boucle pour le faire vous-même. En utilisant le Standard de fonctions de la Bibliothèque C est beaucoup préféré mais il y a parfois des raisons d'écrire votre propre boucle.
Pour la norme ANSI type chaînes de caractères utilisé avec le
char
type il y a un grand nombre de fonctions dont la plupart commencent par str telles que les fonctions de copie ou de comparer des chaînes destrcpy()
,strcmp()
. Il y a aussi un autre jeu qui vous spécifiez le nombre maximal de caractères à copier ou de les comparer commestrncpy()
oustrncmp()
.Une chaîne de caractères en C est un tableau de caractères qui se termine par un zéro binaire de caractère. Donc, si vous utilisez une constante chaîne de caractères comme "Constante" cela va créer un tableau de caractères qui contient un élément par caractère plus un élément supplémentaire pour la terminaison zéro.
Cela signifie que lors de la taille des tableaux de char, vous devez également vous rappeler d'en ajouter un supplémentaire de l'élément de tableau de tenir la terminaison zéro.
La strncpy (), fonction copie d'un tableau de char à l'autre jusqu'à le nombre maximum de caractères spécifié ou lorsque la terminaison zéro est trouvé. Si le nombre de caractères maximum est atteint, alors le tableau de destination ne sera pas résiliée par l'une de terminaison zéro donc c'est quelque chose à regarder dehors pour.
Il existe aussi des fonctions pour travailler avec une large utilisation de caractères UNICODE.
OriginalL'auteur Richard Chambers
Utilisation:
Alternative:
Ne pensez vous pas que le
sizeof(char)
est un peu redondant, car unchar
est uniquement un octet? À moins que je pense de ce tort n'est-ce pas juste diremalloc(1 * strlen("Alpha\0"))
?Ajoute simplement à la lisibilité (surtout étant donné que les lecteurs peuvent varier considérablement en fonction de leur expertise)
ah je vois, merci 🙂
Et lorsque vous avez supprimé la
\0
, le strlen valeur sera un octet trop court pour malloc...OriginalL'auteur check123