请问C语言指针赋值问题

char *oldTimeStr=""; //全局变量

char *token; //局部变量
char *timeStr; //局部变量

大意是我在一个循环里,将token赋给timeStr,这个没有问题。这个token值的例子: 15/04/2013:00:00:02

for (n=0; n<7; n++) {
//n=3 Time,
if (n==3) {
timeStr = token;
}
}

自循环结束后作完处理,将timeStr赋给全局变量oldTimestr,用下边两种都得不到要得结果.
oldTimeStr = timeStr;
//strcpy(oldTimeStr,timeStr);

要怎样处理才行呢?先谢了
首先感谢各位的热心。我重新调试了一下,加了更多的调试代码,如下,当用oldTimeStr = timeStr赋值后,打印的代码 AFS_Production.c(141) 已经拿到了需要的东西,但是第二次循环开始后,值已经变了,见AFS_Production.c(41)。

Starting iteration 2.
Starting action AFS_Production.

AFS_Production.c(41): oldTimeStr beginbegin=cast.com
AFS_Production.c(84): oldTimeStr =cast.com, TimeStr = 15/04/2013:00:00:02

AFS_Production.c(100): oldTimeStr =15/04/2013:00:00:02
AFS_Production.c(141): oldTimeStr enened=15/04/2013:00:00:02

Ending action AFS_Production.
Ending iteration 2.

Starting iteration 3.
Starting action AFS_Production.

AFS_Production.c(41): oldTimeStr beginbegin=›3›3A
AFS_Production.c(84): oldTimeStr =1.1", TimeStr = 15/04/2013:00:00:03

AFS_Production.c(100): oldTimeStr =15/04/2013:00:00:03
AFS_Production.c(104): -------count =1
AFS_Production.c(141): oldTimeStr enened=15/04/2013:00:00:03
Ending action AFS_Production.
Ending iteration 3.

首先,strcpy(oldTimeStr,timeStr);肯定是不行的,因为开始的时候,全局变量进行初始化成一个常量,char *oldTimeStr="";常量是不能被修改的,所以strcpy(oldTimeStr,timeStr);会出错
然后oldTimeStr = timeStr;也是不行的,因为timeStr是局部变量,具有一定的生存周期,在生存周期后果,这个指针指向的内容会无效,所以你直接把指针付给全局变量也不行。
正确的做法有很多,我给出2种:
1. 在定义全局变量的时候,定义为char oldTimeStr[100] = {0},这里100是个足够大的数,保证在任何时候都可以完全存放timeStr的值,这样可以使用strcpy(oldTimeStr,timeStr);了,这种情况适用于timeStr最大长度可知的情况;
2.一开始的时候,定义 char *oldTimeStr = NULL;
在给oldTimeStr赋新值的时候,使用malloc申请内存,然后复制字符串
if (oldTimeStr ) free(oldTimeStr);
oldTimeStr = (char*)malloc(strlen(timeStr)+1);
strcpy(oldTimeStr,timeStr)
这种情况适用于timeStr最大长度未知的情况追问

试第一种方法,可以啦,哈哈。我原来也试过,就是没成功,也没找到哪里不对。

谢谢啦!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-28
要是都在一个函数内是不会有问题的。
你的问题应该不在上面所述的部分。
第2个回答  2013-04-28
既然timeStr是局部变量,那么在这个函数结束时,其内存空间会被释放。所以得不到你想要的结果!可以考虑动态分配内存
第3个回答  2013-04-28
有没完整的程序
第4个回答  2013-04-28
代码能全一点吗,从这个片段看不出你要干什么?
第5个回答  2013-04-28
要是都在一个函数内是不会有问题的。
你的问题应该不在上面所述的部分。
第6个回答  2013-04-28
既然timeStr是局部变量,那么在这个函数结束时,其内存空间会被释放。所以得不到你想要的结果!可以考虑动态分配内存
第7个回答  2013-04-28
有没完整的程序
第8个回答  2013-04-28
代码能全一点吗,从这个片段看不出你要干什么?
相似回答