更新模块级别状态字符串的正确方法

时间:2014-10-15 18:18:14

标签: c memory static scope

我有一个以这种方式声明的模块级字符串:

char* sStatus = NULL;

此字符串可以为NULL(无状态),或者具有一些指示状态的关联字符串。状态字符串可以从程序的不同部分读取和写入,这是完全同步的,因此没有并发问题。

如何才能最好地更新此字符串?例如,如果我写了类似的东西:

void addNewRecord(){
   sStatus = "adding new record";
   ...
   ...
   sStatus = "finished adding new record";
}

然后它工作,但我担心字符串是函数的本地,所以一旦函数退出字符串不再有效?但该程序并没有崩溃。我打印出指针的地址,它绝对不在堆栈中,看起来是在某种恒定的内存区域,所以它应该是安全的。

尽管如此,我想知道处理这种数据结构使用的正确方法是什么。

1 个答案:

答案 0 :(得分:0)

您应该使用strncpy()复制字符串"添加新记录" sStatus:

  memset(sStatus, '\0', strlen(sStatus));  //clear before update
  strncpy(sStatus, "adding new record", strlen((const char *)"adding new record"));

当然,在将字符串复制到sStatus之前,应该为它分配内存。