Je lis mon manuel et j'essaie de résoudre la question posée aux lecteurs.Quel est le problème avec strncpy_s() ici?
Le code de mise en jachère est la définition de fonction de mon fichier source de ma réponse.
Je souhaite copier le contenu des chaînes de caractères vers d'autres chaînes.
J'ai choisi les fonctions strncpy_s().
Mais cela ne fonctionne pas. Microsoft Visual Studio indique que l'assertion de débogage a échoué!
Je n'ai aucune idée de comment le réparer.
cow.h
// déclarations de classe
#include <iostream>
#ifndef COW_H_
#define COW_H_
class Cow {
char name[20];
char * hobby;
double weight;
public:
Cow();
Cow(const char * nm, const char * ho, double wt);
Cow(const Cow & c);
~Cow();
Cow & operator=(const Cow & c);
void ShowCow() const; // display all cow data
};
#endif
de cow.cpp
// méthodes de classe
Cow::Cow(const char * nm, const char * ho, double wt)
{
int len = std::strlen(nm);
strncpy_s(name, len, nm, len);
name[19] = '\0';
len = std::strlen(ho);
hobby = new char[len + 1];
strncpy_s(hobby, len, ho, len);
hobby[len] = '\0';
weight = wt;
}
Cow::Cow()
{
strncpy_s(name, 19, "no name", 19);
name[19] = '\0';
int len = std::strlen("no hobby");
hobby = new char[len + 1];
strncpy_s(hobby, len, "no hobby", len);
hobby[len] = '\0';
weight = 0.0;
}
Cow::Cow(const Cow & c)
{
int len = std::strlen(c.name);
strncpy_s(name, len, c.name, len);
name[19] = '\0';
len = std::strlen(c.hobby);
hobby = new char[len + 1];
strncpy_s(hobby, len, c.hobby, len);
hobby[len] = '\0';
weight = c.weight;
}
Cow::~Cow()
{
delete [] hobby;
}
Cow & Cow::operator=(const Cow & c)
{
if (this == &c)
return * this;
delete [] hobby;
int len = std::strlen(c.name);
strncpy_s(name, len, c.name, len);
name[19] = '\0';
len = std::strlen(c.hobby);
hobby = new char[len + 1];
strncpy_s(hobby, len, c.hobby, len);
hobby[len] = '\0';
weight = c.weight;
return * this;
}
void Cow::ShowCow() const
{
cout << name << ", " << hobby << ", " << weight << endl;
}
usecow.cpp
#include <iostream>
#include "cow.h"
int main()
{
Cow Japan;
Japan.ShowCow();
Cow America("Aspen", "Swim", 307.45);
America.ShowCow();
return 0;
}
Veuillez ajouter du code lorsque vous utilisez votre classe 'Cow'. – Ari0nhh
Avez-vous vérifié les paramètres que vous avez passés avec ce que le manuel dit sont nécessaires? Dans un endroit, vous ne passez que les paramètres '3', mais dans un autre endroit, vous passez les paramètres' 4' à 'strncpy_s'. – Galik
@ Ari0nhh Oui, j'ajoute usecow.cpp tout à l'heure. – user9418