2011-11-08 4 views
0

Est-ce que cette expression est correcte?Copie de données active

{ 
    char a; 
    char *temp; 
    for(int j = 0; j < len; j++) 
    { 
     strcpy(&temp[j], (char*)a); 
    } 
} 

dans ce code a est mis à jour à l'extérieur par l'entrée d'utilisateur/course clé. Je veux copier tous les a entrants/mis à jour au temp en tant que chaîne entière.

+0

@ObscureRobot: Vous pouvez faire des liens nommés dans les commentaires avec le format [nom] (adresse). – Mankarse

+0

c'est un bogue dans le code de StackOverflow qui transforme automatiquement les réponses courtes en commentaires. Je pensais avoir déjà supprimé ce commentaire, je l'ai supprimé une fois de plus. – ObscureRobot

Répondre

1

Depuis 'a' dans votre exemple n'est pas terminé par un caractère nul et que vous souhaitez affecter un seul caractère dans un tampon de chaîne, vous pouvez le faire:

int const buffer_size = 5; 
char a = 'c'; 
char *temp = new char[buffer_size]; // Remember to allocate your string buffer 
temp[index] = a; 
// ..... 

delete[] temp; // free buffer. 

index est un int que vous pouvez utiliser pour garder la trace de la position suivante dans le tampon.

0

Non pour quelques raisons:

  • temp n'est pas initialisées, il pointe vers un emplacement aléatoire et n'a pas la mémoire allouée pour cela, vous allez juste d'écrire sur une partie aléatoire de la mémoire (et/ou crash).
  • a est un char et vous traitez sa valeur en tant que chaîne (char*) en utilisant strcpy (Je suppose que vous vouliez dire (char*)&a qui est encore mal).
  • strcpy copie char s poursuit en de la source (a) vers la destination jusqu'à ce qu'il frappe un '\0' dans la source ... qui pourrait être n'importe où depuis a est pas une chaîne terminée par un NUL mais char.

Si vous voulez écrire/ajouter un seul char à une chaîne/tampon, vous faites juste buffer[position] = character, où buffer est un char[] ou un char* pointant vers un bloc de mémoire allouée, position est la position dans la tampon que vous voulez coller le char, et character est évidemment que char. De toute façon, je n'ai aucune idée de ce que vous essayez de faire ou de la logique derrière laquelle vous essayez de faire ce que vous essayez de faire comme ça.

EDIT: Et vous avez ce étiqueté comme C++, pourquoi ne vous utilisez std::string et std::cin si vous êtes en fait en C++?

0

Votre code est erroné de tant de façons:

  1. Vous ne pouvez pas jeter un char un char *. Vous devez faire quelque chose comme ceci: (char *)&a; et puisque a est un caractère, vous n'avez pas besoin de le lancer du tout.

  2. Vous n'avez pas besoin de strcpy il. Vous pouvez juste faire quelque chose comme: temp[j] = a;

  3. char *temp n'a pas de mémoire associée.Donc, vous devez faire quelque chose comme ceci: char *temp = malloc(sizeof(char) * len);

Code complet ici:

{ 
char a = myFunToGetInput(); 
char *temp = malloc(sizeof(char) * len)); 
for(int j = 0; j < len; j++) { 
    temp[j] = a; 
} 
} 

Ou si vous avez utilisé memset avant:

{ 
char a = myFunToGetInput(); 
char *temp = malloc(sizeof(char) * len)); 
memset(temp, (unsigned char)a, len); 
} 
+0

Oh, c'est vrai! J'ai manqué cela au milieu de toute l'autre erreur: D – mtahmed

+1

Ce serait une bonne réponse pour C. En C++, utilisez 'std :: string' pour éviter les fuites de mémoire. –

+0

Travaillé avec C beaucoup ces derniers temps, donc c'est coincé dans mon esprit. Merci pour le conseil si. – mtahmed

Questions connexes