Отключение 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 Я не проверял это, но проверьте это и посмотрите.