在C语言中如何为字符串分配内存以复制至新内存空间?
在C语言中为字符串"Best School"分配足够内存的方法
你试过的这两种写法都完全可行,能给目标字符串分配足够的内存:
你已经尝试的有效方案
malloc(strlen("Best School") + 1):strlen()只统计字符串里的可见字符数,不包含末尾的\0终止符,所以加1就是给这个关键的终止符留位置,确保复制出来的是合法的C字符串。malloc(sizeof("Best School")):字符串字面量"Best School"在内存里本身就带着结尾的\0,sizeof()会返回整个字符串(包括终止符)的总字节数,用这个值分配内存刚好够装下完整的字符串。
其他可选的内存分配方式
除了上面两种,你还可以用这些方法:
calloc(strlen("Best School") + 1, sizeof(char)):calloc不仅会分配内存,还会把所有字节初始化为0,相当于自动帮你把终止符的位置填好。不过就算不用这个初始化,后续用strcpy之类的函数复制字符串时也会覆盖终止符,但这种方式同样能保证内存足够。- 如果是在栈上分配(非堆内存),可以直接写
char new_str[sizeof("Best School")];,不过栈内存空间有限,只适合短字符串,而且变量离开作用域后内存会被自动释放,没法长期保存。
另外要记住,用malloc或calloc分配的堆内存,不用的时候一定要用free()释放,不然会造成内存泄漏。
内容的提问来源于stack exchange,提问作者Frank Okey
相关产品推荐
相关产品推荐

