Несмотря на то, что я знаю, что делает strcpy, я не смог понять, что он сделал в этом конкретном c случае. Когда я увидел это, он сказал, что скопировал строку p на один символ назад, но я не до конца понял, почему источником был p + 1. Код, где я увидел это здесь:
#include <stdio.h>
#include <string.h>
#define MAXLINE 100000
int mgetline(char s[], int maxline);
int removetrail(char p[], int length);
int main(void){
int len, lenr;
char line[MAXLINE];
while ((len = mgetline(line, MAXLINE)) > 0){
if ((lenr = removetrail(line, len)) > 0)
printf("%s", line);
}
return 0;
}
int mgetline(char s[], int maxline)
{
int i, c;
for (i = 0;(i < maxline) && ((c = getchar()) != EOF);++i){
if (c == '\n'){
s[i] = c;
break;
}
else
s[i] = c;
}
++i;
s[i] = '\0';
return i;
}
int removetrail(char p[], int length)
{
int a;
for (a = 0 ; ((p[a] == '\t') || (p[a] == ' ')) && a < length ; length--)
strcpy(p, p+1);
for (a = length - 2 ; ((p[a] == '\t') || (p[a] == ' ')) && a > 0 ; --a)
;
if ((p[a] != ' ') && (p[a] != '\t') && (a >= 0)){
++a;
p[a] = '\n';
++a;
p[a] = '\0';
}
return a;
}