Итак, я делаю это задание. Моя работа состоит в том, чтобы сделать две функции, char* readLine()
, которые должны читать одну строку из стандартного ввода и возвращать указатель на эту строку.
Другая функция - char** readLines(int *n)
, которая должна считывать пару строк (разделенных новой строкой) из стандартного ввода и возвращать массив указателей на символы, где каждый указатель указывает на одну из введенных строк. Также предполагается, что функция возвращает количество строк, прочитанных указателем int *n
. Процесс повторяется до тех пор, пока не будет введена пустая строка (фактически нажатием только ввода).
Вот как я это сделал:
#include <stdlib.h>
#define MAX 100
#define WRD 20
char* readLine() {
char *p, *first; // declaring pointers
p = (char*)malloc(WRD*sizeof(char)); // WRD stands for maximum word length
if (p == NULL) exit(1);
first = p; // remebering the position of first char in string
// put every char in string, stop when you hit enter. next line is overwriting new line with string escape.
while ((*p++ = getchar()) != '\n');
*--p = '\0';
// return start position of string
return first;
}
char** readLines(int *n) {
char** p;
char* temp;
p = malloc(MAX*sizeof(char*)); // allocate space for array of char pointers
int i = 0;
while (1) {
temp = readLine(); // keep readLine() pointer in temporary variable
printf("%p\n", temp);
if (*temp == '\0') // check if it's empty string, if yes break the loop
break;
else
*(p+i) = temp; // if it's not empty, write it in the array of char pointers
i++; // increment counter by one
}
printf("break"); //this doesn't even get executed at all
*n = i; // dereference pointer with number of inputted words
return p; //return an array of char pointers
}
int main() {
int *n;
char **p;
p = readLines(n);
printf("success");
printf("%d", *n);
}
Странная вещь в том, что если я просто скопирую paste char** readLines()
Блок в int main()
, все в порядке. Я получаю "break" в качестве вывода, что никогда не происходит при реализации, которую я предоставил. Код завершается в строке if (*temp == '\0')
, когда указана пустая строка, только команда выводит команду «Команда прервана».
Почему этот блок кода работает по-разному в функции и в main ()? Заранее спасибо, извините, но я очень новичок в c.