处理动态字符串时这是一个好习惯吗? 按顺序说,它不会产生“未定义的行为”吗?
#include <stdio.h>
//Global Error Messaging
char *error_message;
void print_error(){
printf("%s", error_message);
}
int main ()
{
error_message = "Error";
print_error();
error_message = "Another Error";
print_error();
error_message = "Ops I did it again!";
print_error();
return 0;
}
答案 0 :(得分:2)
指向字符串文字的指针不会变得无效。如果你只存储那些你是安全的。
(char const*
应该是存储指向字符串文字的指针的首选类型,因为如果您尝试修改字符串文字,可能会被操作系统杀死。)
离开当前范围后,Stringy堆栈数组将变为无效,并且malloc
ed字符串在释放后将变为无效。
全局变量在多线程上下文中可能不是一个好主意,并且通常不赞成,但在某些情况下它们可能有意义甚至是必要的(例如,处理Unix信号)。