当我运行此代码时,我输出为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);
}
}
};
}
}
答案 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)