C++ Char pointeur vers char tableau
Aucune des réponses que j'ai lu de travail, donc je suis en demandant de nouveau.
Je suis en train de copier le string données pointé par un pointeur de char en char tableau.
J'ai une fonction qui lit un ifstream dans un char tableau
char* FileReader::getNextBytes(int numberOfBytes) {
char *buf = new char[numberOfBytes];
file.read(buf, numberOfBytes);
return buf;
}
Je puis avoir une structure (struct):
struct Packet {
char data[MAX_DATA_SIZE]; //can hold file name or data
} packet;
Je veux copier ce qui est retourné à partir de getNextBytes(MAX_DATA_SIZE) des paquets.de données;
EDIT: Laissez-moi vous montrer ce que j'obtiens avec toutes les réponses obtenu ci-dessous (memcpy, strcpy, en passant comme paramètre). Je pense que l'erreur vient d'ailleurs. Je suis en train de lire un fichier binaire (c'est un png). Je vais boucle tandis que la fstream est bonne() et de les lire à partir de la fstream dans le buf (qui pourrait être le tableau de données). Je veux voir la longueur de ce que j'ai lu :
cout << strlen(packet.data) << endl;
Cela renvoie tailles différentes à chaque fois:
8
529
60
46
358
66
156
Après que, apparemment, il ne reste plus d'octets à lire même si le fichier est 13K + octets de long.
ce qui n'a pas de travail? avez-vous essayé
strcpy
ou strncpy
? est votre buf
correctement NULL?J'ai essayé les deux et, oui, buf est bien une valeur NULL. Buf est effectivement binaire des données lues à partir d'un fichier fstream
Si vous avez dû re poste en raison de l'absence de réponses ou de solutions correctes, essayez de l'attribution d'un Bounty sur la question
OriginalL'auteur Sotirios Delimanolis | 2012-03-01
Vous devez vous connecter pour publier un commentaire.
Cela peut être fait en utilisant le standard de la bibliothèque de la fonction memcpy, qui est déclarée dans /:
Cela nécessite de fichier.read renvoie bon char de la série qui se termine par '\0'. Vous pouvez également assurer numberOfBytes est assez grand pour accueillir l'ensemble de la chaîne. Sinon, vous pourriez peut-être obtenir une segmentation fault.
OriginalL'auteur myin528
OriginalL'auteur Rohit Vipin Mathews
Edit:
Si oui ou non ce est gérée comme une chaîne de caractères est une distinction très importante. Dans votre question, vous avez parlé comme d'une "chaîne", qui est ce qui nous a tout confondu.
Sans aucune bibliothèque de l'aide:
À l'aide de
#include <cstring>
:Ou pour un crédit supplémentaire, la réécriture de
getNextBytes
elle dispose donc d'un paramètre de sortie:Alors c'est juste:
Edit 2:
Pour obtenir la longueur d'un fichier:
Et avec ça dans la main...
Maintenant, vous avez l'intégralité du fichier
buffer
.OriginalL'auteur Gunslinger47
strlen est pas un moyen valable pour déterminer la quantité de données binaires. strlen lit juste jusqu'à ce qu'il trouve '\0', rien de plus. Si vous voulez lire un bloc de données binaires, il suffit d'utiliser un std::vector, redimensionner à la quantité d'octets lus à partir du fichier, et de le retourner de la valeur. Le problème est résolu.
OriginalL'auteur cooky451