打印出设置为NULL的char *的可能方法?

时间:2015-12-05 05:30:10

标签: c++

我有一个默认构造函数,它将所有成员变量设置为空状态,稍后当我运行程序时,它会创建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; 

2 个答案:

答案 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"))