在使用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
,我们可以确保分配足够的内存来完整地存储字符串。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具