Отключение strncat от одной ошибки - K&R C упражнение 5-5

Моя версия strncat копирует слишком много символов в место назначения, и я не могу понять, почему.

#include <stdio.h>
#define MAX_CHARS 20

void nconcatenate(char *start, char *end, int n)
{
  if(sizeof start + n > MAX_CHARS)
    return;

  while(*start++);
  start--; /* now points to the final char of start, the \0 */
  int i;
  for(i = 0; (*start++ = *end++) && i < n; i++);
  *start = '\0';
}

int main()
{
  char start[MAX_CHARS] = "str";
  char *end = "ingy!";
  nconcatenate(start, end, 3);
  printf("start = %s\n", start);
  return 0;
}

Используя 3 как 'n' выходы

stringy

что слишком много символов.

1 ответ

Решение

Может потому что в состоянии

(*start++ = *end++) && i < n

сначала он делает (*start++ = *end++), а после этого проверяет i

Я не проверял это, но проверьте это и посмотрите.

Другие вопросы по тегам