我有一个以这种方式声明的模块级字符串:
char* sStatus = NULL;
此字符串可以为NULL(无状态),或者具有一些指示状态的关联字符串。状态字符串可以从程序的不同部分读取和写入,这是完全同步的,因此没有并发问题。
如何才能最好地更新此字符串?例如,如果我写了类似的东西:
void addNewRecord(){
sStatus = "adding new record";
...
...
sStatus = "finished adding new record";
}
然后它工作,但我担心字符串是函数的本地,所以一旦函数退出字符串不再有效?但该程序并没有崩溃。我打印出指针的地址,它绝对不在堆栈中,看起来是在某种恒定的内存区域,所以它应该是安全的。
尽管如此,我想知道处理这种数据结构使用的正确方法是什么。
答案 0 :(得分:0)
您应该使用strncpy()复制字符串"添加新记录" sStatus:
memset(sStatus, '\0', strlen(sStatus)); //clear before update
strncpy(sStatus, "adding new record", strlen((const char *)"adding new record"));
当然,在将字符串复制到sStatus之前,应该为它分配内存。