在使用strlen() 函数判断一个字符串长度后重新开辟一个内存存放时要+ 1

发布时间 2023-12-11 14:36:29作者: 刻黑
typedef struct
{
    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,我们可以确保分配足够的内存来完整地存储字符串。