将字符串复制到内存时,使用malloc分配足够空间的正确语句咨询
字符串内存分配问题解答
要把字符串"Best School"复制到新内存空间,必须预留**包含末尾终止符\0**的足够空间。先明确:"Best School"有11个可见字符,加上\0一共需要12字节空间。以下是各选项的分析:
选项A:
malloc(sizeof("Best School"))
C语言中,字符串字面量的sizeof会包含末尾的\0,sizeof("Best School")的结果是12,刚好满足存储需求,可行。选项B:
malloc(strlen("Best School"))strlen只统计可见字符的数量(这里是11),不包含\0的空间。用这个分配的内存存字符串会缺少终止符,导致后续字符串操作出错,不可行。选项C:
malloc(11)
只分配了11字节,同样没给\0留位置,无法正确存储完整的C字符串,不可行。选项D:
malloc(12)
12字节刚好能放下11个可见字符加\0,满足存储需求,可行。选项E:
malloc(sizeof("Best School") + 1)sizeof已经给出12字节的需求,加1后分配13字节,虽然多了1字节,但空间足够容纳目标字符串,可行(只是存在少量空间浪费)。选项F:
malloc(strlen("Best School") + 1)strlen得到11,加1后是12,刚好覆盖字符和终止符的空间需求,可行。
总结:可行的选项是A、D、E、F。
内容的提问来源于stack exchange,提问作者Emmanuel Major
相关产品推荐
相关产品推荐

