我今天有个面试,被要求写一个两个字符串连接的函数。但是在我完成之后,我听说,通常代码是可以的,但是我在那里犯了一个小错误。在家里检查过,但一切正常。有什么问题?
char * strconcat (char *S1, char *S2){
char *S3 = new char [strlen(S1) + strlen(S2) +1];
strcpy(S3, S1);
strcat(S3, S2);
return S3;
}
嗯......我猜这都是关于要求和质量期望的。
一些东西:
const
.new[]
失败(虽然它会抛出一个异常,这可能很好)。strcpy()
/strcat()
序列,因为您花费的时间比必要的走弦时间要多。除了编写 C 代码(减去new
)之外,您的代码不能在任何预期的地方工作,例如:
char* hellowWorld = strconcat("Hello ", "world!");
如果您不能直接说明为什么这不起作用,请尝试编译 - 错误会给您提示。
char * strconcat (char *S1, char *S2){
if(S1 == NULL || S2 == NULL)
return NULL;
int S1_len = strlen(S1);
int S2_len = strlen(S2);
char *S3 = new char [S1_len + S2_len +1];
memset(S3, 0, S1_len + S2_len +1);
strcpy(S3, S1);
strcat(S3, S2); // or memcpy(S3+S1_len, S2, S2_len);
return S3;
}
看起来你在编码中混合了 C、C++ 风格。此外,您尝试使用 new 的方式也不是标准方式。您可以使其成为纯 C 方式或 C++ 方式。
看起来,他们将风格视为错误,虽然它是有效的。但你无法预测面试官的想法。