我们先来看如下一段代码:
#include
#include
#include
void SetProc(char **s,const int i);
int main ( void )
{
char *s1=NULL,*s2=NULL;
int i;
i = 1;
SetProc(&s1,i);
fprintf(stderr,"S1 = %s\n",s1);
i = i +1 ;
SetProc(&s2,i);
fprintf(stderr,"S2 = %s\n",s2);
exit(0);
}
void SetProc(char **s,const int i)
{
static char str[1024];
bzero(str,sizeof(str));
snprintf(str,sizeof(str)-1,"%d",i);
*s = (char *)str;
}
以上代码执行起来得到的结果是:
S1 = 1
S2 = 2
执行结果正确。
我们把上面的函数稍稍调整一下。
#include
#include
#include
void SetProc(char **s,const int i);
int main ( void )
{
char *s1=NULL,*s2=NULL;
int i;
i = 1;
SetProc(&s1,i);
i = i +1 ;
SetProc(&s2,i);
fprintf(stderr,"S1 = %s\n",s1);
fprintf(stderr,"S2 = %s\n",s2);
exit(0);
}
void SetProc(char **s,const int i)
{
static char str[1024];
bzero(str,sizeof(str));
snprintf(str,sizeof(str)-1,"%d",i);
*s = (char *)str;
}
执行后的结果是
S1 = 2
S2 = 2
我们仅仅是调整了函数中的红色部分的位置,从代码上看,没有任何地方改变了 S1 的指向位置,似乎结果不应该是这样啊。
这段代码出现问题的原因在于 *s1 , *s2 指向了同一块 buf ,而这个 buf 在两次执行 SetProc 后,其保存的值已经发生了改变。
这两天调一段程序,就发现了这个问题。
这大概是指针使用中非常容易忽视的一个问题了。
阅读(1252) | 评论(0) | 转发(0) |