C++ 查找C字符串中的错误

C++ 查找C字符串中的错误,c++,string,C++,String,我今天有一个inverview,被要求编写一个两个字符串串联的函数。但是在我完成之后,我听说,一般来说代码是可以的,但是我在那里犯了一个小错误。在家检查过了,但一切正常。有什么问题吗 char * strconcat (char *S1, char *S2){ char *S3 = new char [strlen(S1) + strlen(S2) +1]; strcpy(S3, S1); strcat(S3, S2); return S3; } 嗯。。

我今天有一个inverview,被要求编写一个两个字符串串联的函数。但是在我完成之后,我听说,一般来说代码是可以的,但是我在那里犯了一个小错误。在家检查过了,但一切正常。有什么问题吗

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代码,但是使用C++构造。
除了编写C代码(减去
新的
),您的代码并不适用于预期的任何地方,例如:

char* hellowWorld = strconcat("Hello ", "world!");

如果你不能直接告诉你为什么这不起作用,尝试编译——这个错误会给你一个提示。

看起来你在编码中混淆了C、C++风格。另外,您尝试使用new的方式也不是标准方式。你可以用纯C方式或者C++方式。


虽然他们工作的方式是错误的,但你无法预测面试官的心态。

使用<代码>新< /代码>既不是习惯C也不是C++。这是C和C++的一个奇怪的混合。你有什么具体的指导方针?如果我被问到这个问题,作为一个C++问题,我会回答:<代码> STD::String COUNT(const STD:String和S1,const STD::Strand S2){S1+S2;} /Cuth>代码快,脏,“可能大部分时间都足够好”。它的编写方式与我期望的不同,我希望有人向我展示他知道如何编写代码。可能是因为你没有检查空指针?在采访中,最好使用wchar\t版本。它只是显示了全球thinking@David返回s1+s2时的Schwartz误差;没有运算符“+”与这些操作数匹配,它似乎可以工作,但当然,返回的指针在使用后需要删除。它向我发出了有关使用strcpy_s和strcat_s而不是strcpy/strcat的警告,毕竟所有这些都可以工作,为什么在分配新的内存后,在此处添加memset
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;   
}