Comment faire pour stocker des caractères dans un char pointeur à l'aide de la fonction strcpy() la fonction
Je suis à essayer de comprendre pourquoi je ne peux pas stocker les caractères dans mon char pointeur à l'aide de la fonction strcpy() de la commande. Je reçois un seg fault lorsque j'exécute le code ci-dessous.
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char *str1, *str2;
int ret;
strcpy(str1, "abcdefg"); //stores string into character array str1
strcpy(str2, "abcdefg");
printf("contents of %s \n", str1);
ret = strncmp(str1, str2, strlen(str2)); /* compares str1 to str2 */
if (ret > 0) {
printf("str1 is less than str2\n");
}
else if (ret < 0) {
printf("str2 is less than str1\n");
}
else if (ret == 0) {
printf("str1 is equal to str2\n");
}
return 0;
}
Merci!
Avez-vous essayé une recherche sur le web pour strcpy? Il existe beaucoup de documentation décrivant comment l'utiliser.
Vous pouvez, depuis le pointeur pointe vers rien.
Je veux dire les points à quelque chose, c'est à dire, il est initialisé.
Vous pouvez, depuis le pointeur pointe vers rien.
Je veux dire les points à quelque chose, c'est à dire, il est initialisé.
OriginalL'auteur Alfonso Vergara | 2013-10-13
Vous devez vous connecter pour publier un commentaire.
Droit maintenant,
str1
etstr2
sont juste des pointeurs vers un personnage.Lorsque vous ne
strcpy(str1, "abcdefg")
, il tente d'écrire les caractères dans la chaîne "abcdefg" dans la mémoirestr1
points et depuisstr1
points, un inconnu de la mémoire, ce qui, probablement, vous n'avez pas de droits d'écriture, vous obtenez une erreur de segmentation.Un moyen pour résoudre ce problème est d'allouer de la mémoire sur le tas et ensuite stocker ces chaînes.
Vous pouvez également utiliser
strdup
pour dupliquer la chaîne comme Gangâdhar a mentionné.Une autre solution est de déclarer
str1
etstr2
que des tableaux lors de la compilation comme Bryan Cendres suggéréDans le cas, vous souhaitez allouer de la chaîne de manière dynamique, mais pas sur le tas, vous pouvez utiliser
alloca
(pour plus de détails, lire http://man7.org/linux/man-pages/man3/alloca.3.html) kfsone notéMerci les gars! Ce site est assez impressionnant!
Quelqu'un de toujours utiliser
sizeof(char)
parce qu'il peut changer dans les nouvelles normes, comme le temps passeJe me demande pourquoi je obtenir le suivre "attention: incompatible déclaration implicite de la fonction intégrée ‘malloc’ [activé par défaut] char *str1 = malloc(sizeof(char) * 254); "
vous devez ajouter
#include <stdlib.h>
🙂OriginalL'auteur boaz_shuster
de la compilation avec la
-Wall
commande donne un indice utilemerci quand j'ai commencé avec le C/C++, je souhaite que je savais que cela plus tôt
OriginalL'auteur pyCthon
Donné cet exemple, vous n'avez même pas besoin de la fonction strcpy, vous pouvez utiliser:
Si vous voulez en savoir plus sur les pointeurs, il y a un excellent e-book gratuit intitulé Pointeurs et de la Mémoire de Stanford CS de l'Éducation de la Bibliothèque.
OriginalL'auteur Bryan Ash