处理动态字符串时这是一个好的做法吗? 换句话说,它不会产生“未定义的行为”吗?
#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;
}
最佳答案
指向字符串文字的指针永远不会变得无效。如果您只存储这些内容,那么您就是安全的。
(char const*
应该是存储指向字符串文字的指针的首选类型,因为如果您尝试修改字符串文字,您可能会被操作系统杀死)。
一旦离开当前作用域,字符串堆栈数组将变得无效,并且 malloc
ed 字符串在释放后将变得无效。
全局变量在多线程上下文中可能不是一个好主意,并且通常会令人不悦,但在某些情况下它们可能有意义甚至是必要的(例如,处理 Unix 信号)。
关于c - C 中的动态字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059473/