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

复制代码
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,我们可以确保分配足够的内存来完整地存储字符串。

posted @   刻黑  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示