c - C 中的动态字符串

标签 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;
}

最佳答案

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

一旦离开当前作用域,字符串堆栈数组将变得无效,并且 malloced 字符串在释放后将变得无效。

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

关于c - C 中的动态字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059473/

相关文章:

c - MALLOC_CHECK 是否多线程?

将 int32_t 转换为 float

c - 服务器代码在无限循环时未正确监听

c - C语言排序程序

c - 如何在 int safecpy(char **t, char *s) 中使用双指针和 printf?

c - C中union的实际使用

c - 仅当第一个函数在 C 中执行时如何取消第二个函数?

c - 使用 malloc 时出现段错误

c++ - VS2015 无法理解静态内联函数

C 程序,为什么取消引用指向指针的 char 指针未获得预期值