Sizeof运算符使用string来打印其长度

时间:2017-03-13 17:26:19

标签: c sizeof

当我运行此代码时,我输出为4.但我的字符串长度是3为什么它给4?

TableColumn<A, CellBean> c1;

c1.setCellValueFactory(c -> c.cellBeanProperty()));

CellFactory implements Callback<TableColumn<A, CellBean>, TableCell<A, CellBean>> {
@Override
    public TableCell<A, CellBean> call(final TableColumn<A, CellBean> param) {
    return new TableCell<A, CellBean>() {

        @Override
        protected void updateItem(final CellBean item, final boolean empty) {

        super.updateItem(item, empty);
        if (empty || this.getTableRow() == null) {
            setText(null);
            setStyle("");
            setGraphic(null);
        } else {
            TableView nestedTable = buildTable(item);
            setGraphic(nestedTable);
        }
        }
    };
    }
}

4 个答案:

答案 0 :(得分:5)

C中的字符串包含空终止符,因此字符串&#34; abc&#34;实际占用4个字节。

答案 1 :(得分:4)

字符串文字"abc"的类型为char [4]。它包含字符a,b和c,以及终止空字节。您回来的价值反映了这一点。

如果您想要字符串的长度,请使用strlen

printf("%zu\n", strlen("abc"));

请注意使用%zu格式说明符,该说明符需要size_t(以及strlen返回的sizeof类型的参数。使用错误的格式说明符会调用undefined behavior

答案 2 :(得分:2)

实际上你可能会得到未定义的行为 因为sizeof'运算符会产生类型为size_t的结果, 并且%d不一定是正确的格式说明符。

为什么4?因为初始化器是一个字符串文字,所以它是一个字符串,并且如果它作为内存中的对象存在,则它具有一个空终止符。

答案 3 :(得分:0)

对于C中的字符串,我建议使用strlen(str1)。它返回字符串的长度,没有空终止字符。

size_t strlen(const char *str)