请问C语言指针赋值问题
char*oldTimeStr="";//全局变量char*token;//局部变量char*timeStr;//局部变量大意是我在一个循环里,将token赋给timeS...
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. 展开
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. 展开
5个回答
展开全部
首先,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最大长度未知的情况
然后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最大长度未知的情况
追问
试第一种方法,可以啦,哈哈。我原来也试过,就是没成功,也没找到哪里不对。
谢谢啦!
展开全部
要是都在一个函数内是不会有问题的。
你的问题应该不在上面所述的部分。
你的问题应该不在上面所述的部分。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-28
展开全部
既然timeStr是局部变量,那么在这个函数结束时,其内存空间会被释放。所以得不到你想要的结果!可以考虑动态分配内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码能全一点吗,从这个片段看不出你要干什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询