关于 malloc和字符指针的一点问题

时间:2022-01-30 20:21:34

前天在做一个大整数相乘的算法,用链表实现,最后一步是字符串逆序,其中用到下面一条语句。

char *c = (char*)malloc(sizeof(char)* 5);

调试的时候想看看strlen(c),结果如下:

关于 malloc和字符指针的一点问题

sizeof(c)为24,本以为结果是5的,然后郁闷了。

经过一番思考,原来问题出在一个比较隐秘的地方。

由于malloc函数是不会自动给分配的内存初始化的(calloc可以),而且c只是指向分配内存的第一个字符,当求c指向的字符串长度时,是遇到’\0’字符才结束的。

逐语句调试进入strlen函数看看,如下:

关于 malloc和字符指针的一点问题

里面指出“null-terminated string”也就是要有一个结束标志。于是,我们就可以做个测试了。在后面添上一句,现在代码如下:

char* c=(char*)malloc(5*sizeof(char));

*(c+5)='\0';

然后再看监视器:

关于 malloc和字符指针的一点问题

现在strlen(c)变成预料中的5了。

多说一句,用char c[5]存字符串的时候也要注意结束标志’\0’, 这样char c[5]就只能存长度为4的字符串了。