| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6969 人关注过本帖
标题:c++ 新手,在vs2015环境下,有的函数用不了,以及安全的函数的用法。
只看楼主 加入收藏
cityrunner
Rank: 2
等 级:论坛游民
帖 子:26
专家分:33
注 册:2016-1-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
c++ 新手,在vs2015环境下,有的函数用不了,以及安全的函数的用法。
程序代码:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
class str
{ private:
    char *p;
public:
    str(char *s)
    {
        p = new char[strlen(s) + 1];
        if (p == NULL)
        {
            cout << "动态内存建立不成功,程序终止" << endl;
            exit(0);
        }
        strcpy(p,s);
        cout << "成功创造了对象" << endl;
        cout << "字符数组的内容是:" << endl;
    }
    ~str()
    {
        if (p)
            delete[]p;
        cout << "撤销对象" << endl;
    }
};
void main()
{
    str m("创建动态内存");
        cout << "main()函数" << endl;


}

将 strcpy(p,s)改为strcpy_s(p,sizeof(p),s)后,表面上是没问题,但是运行起来就出现问题,无法运行。
前辈们求解。
2016-04-09 16:15
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:10 
sizeof(p)你以为是数组的长度?只是指针的长度而已。用strlen

未佩好剑,转身便已是江湖
2016-04-09 16:30
cityrunner
Rank: 2
等 级:论坛游民
帖 子:26
专家分:33
注 册:2016-1-22
收藏
得分:0 
回复 2楼 alice_usnet
明白了,改过来了。
但是程序编译运行后,我不知道系统是否调用了析构函数~str(),肯定的是~str()中的
cout<<"撤销对象"<<endl; 语句肯定没有执行。请问这个问题该怎么办?
2016-04-09 16:51
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
回复 3楼 cityrunner
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
class str
{ private:
    char *p;
public:
    str(char *s)
    {
        p = new char[strlen(s) + 1];
        if (p == NULL)
        {
            cout << "动态内存建立不成功,程序终止" << endl;
            exit(0);
        }
        strcpy(p,s);
        cout << "成功创造了对象" << endl;
        cout << "字符数组的内容是:" << endl;
    }
    ~str()
    {
        if (p)
            delete[]p;
        cout << "撤销对象" << endl;
    }
};
void test()
{
    str m("创建动态内存");
}
int main()
{
    str m("创建动态内存");
    cout << "main()函数" << endl;
    test();
  return 0;

}
这样就行了

未佩好剑,转身便已是江湖
2016-04-09 17:14
cityrunner
Rank: 2
等 级:论坛游民
帖 子:26
专家分:33
注 册:2016-1-22
收藏
得分:0 
回复 4楼 alice_usnet
图片附件: 游客没有浏览图片的权限,请 登录注册

谢谢,程序运行完了之后,就停在这了,怎么才能看到 cout<<"撤销对象"<<endl;  这句语句执行。
2016-04-09 17:58
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
回复 5楼 cityrunner
图片附件: 游客没有浏览图片的权限,请 登录注册

我的显示正常

未佩好剑,转身便已是江湖
2016-04-09 18:01
cityrunner
Rank: 2
等 级:论坛游民
帖 子:26
专家分:33
注 册:2016-1-22
收藏
得分:0 
回复 6楼 alice_usnet
那可能是 编译器不同的缘故吧。
2016-04-10 00:52
快速回复:c++ 新手,在vs2015环境下,有的函数用不了,以及安全的函数的用法。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017216 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved