在使用strlen() 函数判断一个字符串长度后重新开辟一个内存存放时要+ 1
typedefstruct
{ char *id; char *name; int score1; int score2; int score3;} Stu;int main(){
Stu *stutmp = (Stu*)malloc(sizeof(Stu));
if (stutmp == NULL)
{
return NULL;
}
char idtmp[100];
scanf("%s", idtmp);
stutmp->id = (char*)malloc(strlen(idtmp) + 1);
...
return 0;
}
在C语言中,字符串是以null字符('\0')结尾的字符数组。当我们使用strlen()函数来获取字符串的长度时,它返回的是字符串中字符的数量,不包括结尾的null字符。
当我们为字符串分配内存时,我们需要考虑字符串的长度以及结尾的null字符。strlen(idtmp) + 1计算的是字符串idtmp的长度加1,这个1就是为null字符预留的。
如果我们只分配了strlen(idtmp)的内存,那么就没有空间来存储null字符。这就意味着,尽管我们尝试将字符串存储在分配的内存中,但实际上这个字符串是不完整的,因为它没有空间来存储null字符。
因此,为了正确地存储一个字符串,我们需要为它分配足够的内存来容纳所有的字符以及一个null字符。通过strlen(idtmp) + 1,我们可以确保分配足够的内存来完整地存储字符串。

浙公网安备 33010602011771号