strlen()遇到\0则停止,计算\0之前的字符个数,而sizeof计算整体的字节大小。
int main() { char a[] = "123"; char b[] = { '1', '2', '3' }; char* c = "123"; cout << sizeof(a) << endl;//4 cout << strlen(a) << endl;//3 cout << sizeof(b) << endl;//3 cout << strlen(b) << endl;//错误:15 cout << sizeof(c) << endl;//4 cout << strlen(c) << endl;//3 return 0; }
其中a和c不用说,都是字符串。
而b是属于字符串数组!是数组。用sizeof计算大小。由于是根据元素个数来初始化的,所以是3。
但是strlen时,由于分配时没有\0,所以只能向后找,答案不是注释中的15,这个结果是不一定的,看内存单元中什么时候遇到\0就停止了。
浙公网安备 33010602011771号