#include <stdio.h>
#include <stdlib.h>
void getline(char *line, int lim)
{
int len = 0;
char c;
while (len < lim)
{
if ((c=getchar()) != EOF && c != '\n')
{
*line++ = c;
printf("reading %c\n", c);
len++;
}
else
break;
}
*line = '\0';
}
int main()
{
char (*lines)[500]; // pointer to array with 500 chars
char *linetwo[4]; //why doesnt this work???? array of 4 pointers.
getline(*lines, 500);
getline(*linetwo, 500); // !!!!ERROR!!!
printf("%s", *lines);
system("PAUSE");
return 0;
}
У меня возникли проблемы с этим кодом. Я хочу четыре строки ввода с каждой строкой, имеющей максимум 500 символов. Я написал функцию getline, чтобы сохранить ее в указателе char *. Однако getline дает ошибку при инициализации массива указателей.Передача массива указателей в функцию
Единственная разница между (*lines)[500]
и *lines[4]
, по-моему, не указывает ни количество строк, ни количество символов в строке.
Пожалуйста, помогите мне понять, почему передача * linetwo в getline после * linetwo [4] инициализация дает ошибку.
Вы разыменование два * неопределенных * указателей, отправляя результаты в функцию, ожидающую действительную память о которой писать. Таким образом, программа вызывается * неопределенным поведением * в каждом случае, когда '* lines' или' * linetwo' отображаются в виде выражений. – WhozCraig
@WhozCraig Я не совсем понимаю ваш комментарий :(Я новичок, так что вы можете рассказать, что это значит разыменовать два неопределенных указателя? – deNsuh
@BLUEPIXY Как они неправильны? – deNsuh