Добрый день!
Я новичок, поэтому буду благодарна за помощь и терпение - я совершенно не знаю терминологию на русском, поскольку изучаю все на английском. Могу только догадываться как может тот или иной термин звучать на русском на основе смысла того или иного слова.
Пожалуйста, помотрите функцию readlines из K&R, страница 109. Я не очень поняла strcpy(p, line). Пожалуйста, исправьте и дополните мои рассуждения:
Предположим input string «Hello world».
- до того как вызвана функция strcpy(p, line), функция readlines() вызывала ( called) фукцию getline(), которая вернула значение переменной i, равное 11. - readlines() путем line[len - 1] убрала newline character '\n', и в итоге line[10] = '\0'; пока все просто и понятно; - дальше readlines() вызывает strcpy(p, line): - правильно я понимаю, что поскольку line заявлена как character array, то когда была вызвана функция getline(line, MAXLEN), то line в данном случае была pointer и в результате array line в фукции realines получила значения «Hello world»; поэтому когда вызывается strcpy(p, line), то line[] = «Hello world», и именно это значение должно быть скопировано в p? Верно ли это?
- также я хотела бы уточнить: p - pointer, то есть получается что strcpy копирует адреса каждой буквы из line в p? или какой именно процесс происходит? Вот сама функция (и плюс ниже getline()):
/* readlines: read input lines */
int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];
nlines = 0;
while ((len = get_line(line, MAXLEN)) > 0)
{
if (nlines >= maxlines || (p = alloc(len)) == NULL)
{
return -1;
}
else
{
line[len - 1] = '\0'; /* delete newline */
strcpy(p, line);
lineptr[nlines++] = p;
}
}
return nlines;
}
/* getline: read a line into s, return length */
int get_line (char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i++)
s[i] = c;
if (c == '\n')
{
s[i] = c;
i++;
}
s[i] = '\0';
return i;
}
Большое спасибо!