【发布时间】:2016-09-08 18:28:26
【问题描述】:
//////
char* duplicate(char* string, int count)
{
char* duped = (char*) malloc( sizeof(char)*(count*strlength(string)+1) );
int i=0,j=0,t=0;
for( i=0; i<count*strlength(string); i++,j++ )
{
if (j==(strlength(string)))
{
j=0;
t++;
}
if (t==count)
{
duped[i] = '\0';
break;
}
duped[i] = string[j];
}
return duped;
}
上面的代码完美运行,但下面的代码给出了分段错误。它们之间有什么区别?函数在看到返回时不应该停止吗?
char* duplicate(char* string, int count)
{
char* duped = (char*) malloc( sizeof(char)*(count*strlength(string)+1) );
int i=0,j=0,t=0;
for( i=0; i<count*strlength(string); i++,j++ )
{
if (j==(strlength(string)))
{
j=0;
t++;
}
if (t==count)
{
duped[i] = '\0';
return duped;
}
duped[i] = string[j];
}
}
【问题讨论】:
-
请修正缩进,希望你的问题能解决一半,如果不是更多的话。\
-
什么是
strlength()?你为什么用它而不是标准的strlen()? -
"只是我写了 strlength。无缘无故。" - 这是一个糟糕的理由。
-
它不可能是完整的代码,因为即使你承认
strlength()应该是strlen()。谁知道那里嵌入了多少其他错误。见minimal reproducible example