Тема: Як розрізняти функції різні різновиди char-ів?
Будь ласка підкажіть!
#include<stdio.h>
#include<string.h>
#include<cassert>
 char *__cdecl strcat(char *A0, const char *A1)
{
    /* int hru = 0;
    printf("Vvedit: \n");
    scanf ("%d", &hru);
    assert(hru+2==4);
    printf ("Execution continues past the first assert\n");
    assert(hru+2==5);
    printf ("Execution continues past the second assert\n"); */
    assert (!(A0== NULL) && !(A1== NULL));
    char *tmp = A0;
    while (*A0)*A0++;
    while (*A1)*A0++=*A1++;
    *A0 = 0;
    return tmp;
}
char *__cdecl strcpy(char *A0, const char *A1)
{
    char *temp = A0;
      size_t min_size = (strlen(A0) < strlen(A1)) ? strlen(A0) : strlen(A1);
//while( *A0 && *A1 ) *A0++ = *A1++;
while( *A1 ) *A0++ = *A1++;
*A0 = 0;
return temp;
}
int main()
{
  char str1[40];
  char str2[40];
  char str[100];
  char Tsi[] = "Tsi ";
  char rjadky[] = "rjadky ";
  char obednany[] = "obednany ";
  char operatsieju[] = "operatsieju ";
  char konkatenatsiji[] = "konkatenatsiji.";
  char newchar400_ = new char[400];
  assert (!(newchar400_== NULL));
  strcpy ( newchar400_ , Tsi );
  strcpy ( str, Tsi );
  strcat ( newchar400_, rjadky);
  strcat ( newchar400_, obednany);
  strcat ( newchar400_, operatsieju);
  strcat ( newchar400_, konkatenatsiji);
  strcat ( str, rjadky);
  strcat ( str, obednany);
  strcat ( str, operatsieju);
  strcat ( str, konkatenatsiji);
  printf ("Trymaj (%s)\n", str);
  strcpy (str1,"ABCD ");
  strcpy (str2,"EFGHJYU");
  //strncat (str1, str2, 2);    //
    printf ("Trymaj (%s)\n", str1);
    char *O = "QWERTYUIOOOOPASDFGHJKL";
    //char *B = char temp[500];
    char *B = "0000000000000000000000000000000000000000000000000000000000000000000000000";
    //memset(B,0,500);
    strcpy(B,O);
    printf ("Trymaj (%s)\n", B);
 return 0;
}
 Ghbgecnbvj припустимо я розмірковую над функцією.  От що виходить, що мені потрібно розрізняти 
що це за char, бо ж виходить що це зовсім різна справа. Це зовсім різна справа, чі то char *O, леть знамагавсь його змінити а тут сегментація!  Або це char str2[ щось ] ,  або new char[ щось ];
все це зовсім різна справа. От чі можна якось розрізняти їх у функції?  Бо інакще вона буде якась недороблена, з цім треба хоч щось якось робити.
До речі, код падає, але питання не в цьому.