strcat()을 실현할 때 겪는 문제와 반성

1105 단어
오늘 일상적으로 바퀴를 만드는 과정(strcat 함수를 실현하는 것)에서 문제가 생겼습니다. 프로그램은 쓸데없는 말을 하지 않고 제 실현을 붙였습니다.
int i_strlen(const char *input);
char* i_strcat(char *input1,const char *input2);
int i_strlen(const char *input)
{
  char cache;
  int i;
  i = 0;
  while((cache = *(input+i)) != '\0')
  {
    ++i;
  }
  return i;
}
char* i_strcat(char *input1,const char *input2)
{
  int l1,l2;
  l1 = i_strlen(input1);
  l2 = i_strlen(input2);
  for(int i = l1;i<=(l1 + l2);++i)
  {
    if (i == l1+l2)
    {
      *(input1 + i) = '\0';
      continue;
    }
    *(input1 + i) = *(input2 + i - l1);
  }
  return input1;
}

실제로 이 실현은 아무런 문제가 없을 것이다. 그런데 프로그램은 왜 핵을 토로했을까?내가 그것을 어떻게 사용하는지 보자.
char *input1 = "Fuck ";
char *input2 = "you.
"; i_strcat(input1,input2);

똑똑한 당신은 문제를 이미 알아차렸을 것이다. 이유는 input1 정장수 그룹이기 때문이다. input2의 데이터를 input1에 추가하려고 시도할 때, 분배되지 않은 공간에 쓰고, 프로그램의 원래 데이터를 덮어쓰며, 프로그램이 붕괴되기 때문이다.총괄적으로 말하자면 수조의 경계 문제를 항상 주의해야 한다. 또한 증강판의strcat 함수를 실현하는 것을 고려할 수 있다. 이 문제를 피할 수 있고 구체적인 실현은 아직 하지 않았지만 어렵지 않을 것이라고 생각한다.

좋은 웹페이지 즐겨찾기