请考虑以下代码。我要问的是,如果这是正确的,是否有什么遗漏。还有别的办法可以做吗。
#include <stdio.h>
#include <string.h>
const char *getOrder (const char *day)
{
if (strncmp(day, "Monday", 7) == 0) {
return "first";
} else if (strncmp(day, "Tuesday", 7) == 0) {
return "second";
} else if (strncmp(day, "Wednesday", 9) == 0) {
return "third";
} else if (strncmp(day, "Thursday", 8) == 0) {
return "forth";
} else if (strncmp(day, "Friday", 6) == 0) {
return "fifth";
} else if (strncmp(day, "Saturday", 8) == 0) {
return "sixth";
} else if (strncmp(day, "Sunday", 6) == 0) {
return "seventh";
} else
return NULL;
}
int main()
{
const char* str = NULL;
str = getOrder ("Monday");
printf("str : %s\n", str);
return 0;
}发布于 2022-07-26 14:14:48
结论是否定的。
原因是free()应该用作malloc()、calloc()或realloc()的合作伙伴。或者说,那些alloc函数只返回一个指针,那么它是否可以由free()回收。
一个附加的原因是,您在代码中编写的所有字符串都分配在.rodata节中,这意味着这些字符串加载在内存空间中,您不能编辑而只能读取,所以即使存在释放它们的方法,您仍然不能使用内存空间。
https://stackoverflow.com/questions/73124321
复制相似问题