C中的动态字符串

时间:2015-10-10 22:12:58

标签: c

处理动态字符串时这是一个好习惯吗? 按顺序说,它不会产生“未定义的行为”吗?

#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;
}

1 个答案:

答案 0 :(得分:2)

指向字符串文字的指针不会变得无效。如果你只存储那些你是安全的。 (char const*应该是存储指向字符串文字的指针的首选类型,因为如果您尝试修改字符串文字,可能会被操作系统杀死。)

离开当前范围后,Stringy堆栈数组将变为无效,并且malloc ed字符串在释放后将变为无效。

全局变量在多线程上下文中可能不是一个好主意,并且通常不赞成,但在某些情况下它们可能有意义甚至是必要的(例如,处理Unix信号)。