
在C++中,怎样在类中声明一个const char*静态成员
我有个函数是constchar*的形参,我想把这个参数传递来的数据存放起来然后下次传递过来我要先做比较如果字符串不一样则将新的字符串存放到哪个静态成员去开发环境是VS20...
我有个函数是const char*的形参,我想把这个参数传递来的数据存放起来
然后下次传递过来我要先做比较 如果字符串不一样 则将新的字符串存放到哪个静态成员去 开发环境是VS2010 哪位大牛帮忙实现下这个声明和比较的代码, 我自己写总是各种编译报错,好晕.. 展开
然后下次传递过来我要先做比较 如果字符串不一样 则将新的字符串存放到哪个静态成员去 开发环境是VS2010 哪位大牛帮忙实现下这个声明和比较的代码, 我自己写总是各种编译报错,好晕.. 展开
1个回答
展开全部
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
struct test1{
static void foo(const char* arg){
if(arg && strcmp(arg, val)){
//不一样
//const char* 不能赋值,所以先用临时变量
char* tmp = (char*)realloc((char*)val, strlen(arg)+1);
strcpy(tmp, arg);
val = tmp;
}
}
static const char *val;
};
//申请长度为1的空字符串,这样可以保证val的指向一定存在,省事
const char* test1::val = (char*)calloc(1, 1);
struct test2{
static void foo(const char* arg){
if(arg && strcmp(arg, val)){
//若arg指向的数组不存在,则val指向的数组也不能使用
val = arg;
}
}
static const char *val;
};
const char* test2::val = "";
int main(){
cout<<"**************************************\n";
test1 a;
a.foo(0);
cout<<a.val<<"\n";
a.foo("123");
cout<<a.val<<"\n";
a.foo("234");
cout<<a.val<<"\n";
//记得要删除
free((void*)a.val);
cout<<"**************************************\n";
test2 b;
b.foo(0);
cout<<b.val<<"\n";
b.foo("123");
cout<<b.val<<"\n";
b.foo("234");
cout<<b.val<<"\n";
return 0;
}
另:建议使用string类型,避免c风格字符串(char*)
追问
谢谢你,我都不想用C风格.太麻烦,主要是重写的父类方法,参数已经定义好了为const char* 我也没办法,按照你的test2的方法 直接赋地址 运行没问题, 但是我还想请问下你这里test1和test2 val成员的不同的初始化写法实质上是什么不同的意思?
追答
一个是堆上的(需要释放),一个是栈上的(不需要释放)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询