0

string1 にはマージされた文字列を保持するのに十分なスペースがないため、2 つの文字列のマージに失敗する次のプログラムがあります。

 #include<stdio.h>
 #include<string.h>
 int main()
  { 
      void strcat2(char *str1,char *str2);
      strcat2("john","kris");
      getchar();
  }
  void strcat2(char *str1,char *str2)
   {
     for (; *str1++;);
     for (;*str1++ =*str2++;);

  }
4

2 に答える 2

3

これはより良いものであるため、これを試すか、より多くのスペースを割り当てることができます.:-

#include <stdlib.h>
#include <string.h>

char* concat(const char *s1, const char *s2)
{
    char *result = malloc(strlen(s1)+strlen(s2)+1);

    strcpy(result, s1);
    strcat(result, s2);
    return result;
}
于 2013-08-22T18:07:26.713 に答える
2

C では、独自のメモリ割り当てを行う必要があります。つまり、ガベージ コレクトされた言語のように関数が文字列を返すことは一般的に不可能です。関数から文字列を返す必要がある場合は、呼び出し元によって事前に割り当てられた結果文字列を渡すか、動的に割り当てて呼び出し元に解放を依頼する必要があります。

C に近道はありません。作業を行うだけです。

于 2013-08-22T18:47:27.657 に答える