举个例子:

static const char * color_to_str(enum Color color) {
    switch (color) {
       case COLOR_RED:
           return "RED";
       case COLOR_BLUE:
           return "BLUE";
       default:
           return "UNKNOWN";
    }
}

static void do_something() {
   printf("The color is %s\n", color_to_str(COLOR_RED));
}

返回指向这些字符串文字的指针是否危险?这种做法有什么问题?

推荐答案

这段代码没有问题.字符串文字存储在二进制文件的只读数据部分中.返回char const *是一个完全有效的代码.然而,如果您返回了char *,如果有人试图修改它,它可能会触发未定义的行为.

C++相关问答推荐

如何用C(使用两个s补数算术的32位程序)计算

想了解 struct 指针和空指针转换

exit(EXIT_FAILURE):Tcl C API类似功能

为什么在C中二维字符数组会有这样的行为?

LONG_DOUBLE_T是否存在(标准C:C23)

初始变量重置后,char[]的赋值将消失

在C++中父进程和子进程中的TAILQ队列同步问题

GCC奇怪的行为,有fork 和印花,有换行符和不换行符

获取前2个连续1比特的索引的有效方法

我在C程序的Flex/Bison中遇到语法错误

为什么Linux无法映射这个PT_LOAD ELF段?

如何在C中用bool进行文件I/O?

Valgrind用net_pton()抱怨

用C++高效解析HTTP请求的方法

在C中使用无符号整数模拟有符号整数

即使我在C++中空闲,也肯定会丢失内存

在分配内存后使用指针是未定义的行为吗?

共享内存未授予父进程权限

const struct 成员的 typedef 中的灵活数组大小

返回指向函数内声明的复合文字的指针是否安全,还是应该使用 malloc?