首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcpy函数总是崩溃

strcpy函数总是崩溃
EN

Stack Overflow用户
提问于 2020-01-15 04:58:30
回答 1查看 93关注 0票数 0
代码语言:javascript
复制
#include <iostream>
using namespace std;

定义类

代码语言:javascript
复制
class fancyString {
private:
    char *content;
    bool flag_bold;
    bool flag_italics;
public:
    fancyString(){
        content="";
        flag_bold= false;
        flag_italics=false;
    }

在这两个函数中,我都被要求使用老式的calloc

代码语言:javascript
复制
    fancyString(char* cntnt){
        content=(char *) calloc(strlen(cntnt)+1, sizeof(char*));

通常,strcpy是导致崩溃的主要原因。

代码语言:javascript
复制
        strcpy(cntnt,content);
    }
    fancyString(fancyString & f1){
        content=(char *) calloc(strlen(f1.content)+1, sizeof(char*));

通常,strcpy是导致崩溃的主要原因。

代码语言:javascript
复制
           strcpy(f1.content,content);
        flag_bold=f1.flag_bold;
        flag_italics=f1.flag_italics;
    }
   friend ostream& operator<<(ostream& os, const fancyString& FS){
       os<<"string is "<<FS.content<<endl<<"bold status is "<<FS.flag_bold<<endl<<"italics status is "<<FS.flag_italics<<endl;
       return os;
    }
    ~fancyString(){
       cout << "Destroying the string\n";
        if ( content != NULL )
            free (content);
    }
};

main函数

代码语言:javascript
复制
int main(int argc, const char * argv[]) {

    fancyString fs1 ("First Example");
     fancyString fs2(fs1);
    cout<<fs2;
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-15 05:06:15

你把strcpy调用的参数弄错了!请参阅cppreference上的定义

char * strcpy ( char *目标,常量char *源);

所以,在你的第一个构造函数中,调用:

代码语言:javascript
复制
strcpy(cntnt,content);

正在尝试将新分配的缓冲区复制到传递的参数中,该参数实际上是一个(常量)字符串文字:

代码语言:javascript
复制
int main(int argc, const char * argv[]) {
   fancyString fs1 ("First Example");
//...

根据评论中的建议注意到了

(1)请注意,在您的calloc调用中-它分配了一个char的“数组”,元素的大小是sizeof(char) 而不是 sizeof(char*) (这对于指针的“数组”是合适的)。使用:

代码语言:javascript
复制
    content = (char *) calloc(strlen(cntnt)+1, sizeof(char));

类似地在复制构造函数中也是如此。

(2)假设您的第一个构造函数从未打算修改作为其参数给定的字符串,那么您实际上应该将其指定为const

代码语言:javascript
复制
fancyString(const char* cntnt){
  //...

(这将标记出strcpy参数错误的错误!)

请随时要求进一步澄清和/或解释。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59741694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档