我有一个默认构造函数,它将所有成员变量设置为空状态,稍后当我运行程序时,它会创建3个对象(1个空,2个带有内容),当打印空对象时它会崩溃,因为它无法打印NULL。
我尝试将char *变量设置为“”(见下文),它在视觉工作室工作,但在学校的编译器上它返回错误“警告:从NULL转换为非指针类型'char',所以我是想知道还有另一种解决方法吗?
或者还有另一种方法可以将char *设置为安全可识别的空状态吗?
/*doing the strcpy*/
Item::Item(){
_price = 0;
_quantity = 0;
_name = NULL;
_name = new char[1];
strcpy(_name, "");
_sku[0] = NULL;
}
成员变量的声明:
class Item : public PosIO {
private:
char _sku[MAX_SKU_LEN + 1];
char* _name;
double _price;
bool _taxed;
int _quantity;
答案 0 :(得分:1)
只需将_name
初始化为' \ 0'这是结束字符(表示字符串或字符数组的字符结束)。这样你的变量就存在并且有数据,但是没有任何东西可以打印出来。
另请注意,指针是"安全"当它是NULL
时,程序在尝试打印时崩溃的事实是正常的,事实上你应该在打印它之前检查指针是否为NULL
(假设你希望它是在某些时候为NULL)。
char *pt = NULL;
/* ... code ... */
if (pt != NULL)
printf("%c", pt);
答案 1 :(得分:0)
打印空指针是未定义的行为,但如果确实希望允许将变量设置为空指针,则可以使用简写if语句打印" NULL&# 34;如果变量是空指针,那么如果变量指向空指针
,则指向该变量p <- ggplot(cohort.chart.cl, aes(x=month, y=clients, group=cohort))
p + geom_area(aes(fill = cohort)) +
scale_fill_manual(values = reds(nrow(cohort.clients))) +
ggtitle('Customer Cohort') + theme(legend.position="bottom",panel.background=element_rect(fill = "light grey"),legend.text = element_text(size = 7),legend.key.size = unit(0.25, "cm"))