一个字符串拷贝问题,请高手看错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/07/04 16:43:56
char * strdup(const char * strsource)
{
static char str[MAX_STR_LEN];
strcpy(str,strsource);
return str;
}
一个找错的题目,请问错在哪里了?

你可以使用下面代码来进行测试:
char *b, *c;
b = mystrdup( "asdf" );
c = mystrdup( "fffsdf" );
虽然在第2行中b的值果然为asdf,但经过第3行后,c的值为fffadf,b的值也为fffadf了。

因为static局部变量的生存周期和程序的生存周期相同。也就是说,他是独立与该函数存储的。那么每次strdup返回的str地址都是同一个地址。因此,采用该函数进行多次赋值时,都是对同一个存储区进行赋值,也就是说,b和c实际是具有同一地址的。这和strdup的初衷是相悖的。

明显:strsource是用const char *定义的,而用const char *定义的是只读变量,不是常量,而你的程序中用strcpy(str,strsource); 试图把它改变了,所以会出错的~!~正确程序应该是这样:
char * strdup(char * strsource)
{
static char str[MAX_STR_LEN];
strcpy(str,strsource);
return str;
}

没有错误,除非MAX_STR_LEN没定义。