strcpy() et les tableaux de chaînes de caractères
J'ai besoin de stocker l'entrée de l'utilisateur dans un tableau de chaînes de caractères.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *history[10] = {0};
int main (void) {
char input[256];
input = "input";
strcpy(history[0], input);
return (EXIT_SUCCESS);
}
Cours d'exécution sur le terminal j'obtiens une erreur de Segmentation et dans NetBeans-je obtenir principale.c:11: error: incompatible types in assignment. J'ai aussi essayé de déplacer l'ensemble de l'histoire pour stocker la dernière entrée dans la première position (histoire[0]).
history[9] = history[8];
history[8] = history[7];
history[7] = history[6];
history[6] = history[5];
history[5] = history[4];
history[4] = history[3];
history[3] = history[2];
history[2] = history[1];
history[1] = history[0];
history[0] = input;
Mais cela entraîne la sortie de ce genre.
Si l'entrée est "entrée"
Histoire 0: entrée
Histoire 1: null
etc.
Si l'entrée est "nouveau"
Histoire 0: nouveau
Histoire 1: les nouvelles
Histoire 2: null
etc.
Chaque fois qu'une nouvelle entrée est entré dans les pointeurs de la chaîne de maj, mais il ne provoque que la valeur la plus récente pour être sauvé dans l'histoire de tableau.
OriginalL'auteur Spencer | 2010-10-10
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'allouer de l'espace pour la chaîne. Cela peut être fait de plusieurs façons, les deux principaux prétendants à ressembler à:
et
La première statiquement alloue de dix caractères tampons à partir de 100 caractères chacune. Le deuxième, comme vous l'avez écrit, de manière statique alloue dix pointeurs de caractères. En remplissant le pointeur avec la mémoire allouée dynamiquement (qui pourrait être chacun des longueurs arbitraires), il y a de la mémoire pour lire la chaîne de caractères plus tard.
OriginalL'auteur wallyk
strcpy()
ne pas allouer de la nouvelle zone de mémoire pour la chaîne, il ne copie les données d'un tampon à l'autre. Vous avez besoin d'allouer de nouveaux tampons à l'aide destrdup()
ou créez la matrice de pré-alloué (char history[10][100];
). Dans ce cas, n'essayez pas de déplacer les pointeurs et l'utilisationstrcpy
pour copier les données.OriginalL'auteur eyalm
Cela se produit parce que vous essayez de faire de la matrice 'input' point de la chaîne "entrée". Ce n'est pas possible, puisque le tableau est un pointeur const (c'est à dire la valeur de points ne peut pas changer).
La façon correcte de faire ce que vous voulez est:
Bien sûr, c'est un problème mineur, le principal problème a déjà été posté deux fois. Je voulais juste pointer.
Btw, je ne sais pas comment vous la phase de compilation lors de l'exécution sur le terminal. Ne pas vous obtenez une erreur? Peut-être juste un avertissement? Essayez de compiler avec -Wall-pedantic
OriginalL'auteur George