Это может помочь:
Запись в события
Если для allDay установлено значение 1, eventTimezone должен иметь значение Time.TIMEZONE_UTC и время должен соответствовать полуночной границе.
Я уверен, что вы на правильном пути, но некоторые указатели для удобочитаемости:
if(array[0] != NEWLINE)
{
printf("%c", array[line]);
}
ИМХО это нехорошо.
Во-первых, он не делает то, о чем вас просили. Вы должны были найти последний пробел после непустого перед границей выходной линии. Ваша программа даже не пытается это сделать удаленно, похоже, она пытается найти первые пробелы после (поля - 5) символов (откуда взялись 5? Что, если все слова имеют 9 букв?). Однако он также не делает этого из-за ваших манипуляций с переменной newls. Кроме того, это:
for(line = 0; line < i; line++) {
if(array[0] == NEWLINE)
;
else
printf("%c", array[line]);
}
, вероятно, неправильно, потому что вы проверяете условие, которое никогда не меняется в цикле.
И, наконец, что не менее важно, сохранение всего файла в буфере фиксированного размера не очень хорошо, потому что две причины:
Я думаю, вам следует начать заново, переосмыслить свой алгоритм (включая угловые случаи) и только после этого начинать кодирование. Я предлагаю вам:
printf ("% s", ...)
), скопировать то, что вы не печатали к началу буфера, перейдите от этого Выглядит (без тестирования), как будто это может работать, но кажется, что это довольно сложно.
Вот некоторый псевдокод для моей первой мысли
const int MAXLINE = ?? — maximum line length parameter
int chrIdx = 0 — index of the current character being considered
int cand = -1 — "candidate index", Set to a potential break character
char linebuf[bufsiz]
int lineIdx = 0 — index into the output line
char buffer[bufsiz] — a character buffer
read input into buffer
for ix = 0 to bufsiz -1
do
if buffer[ix] == ' ' then
cand = ix
fi
linebuf[lineIdx] = buffer[ix]
lineIdx += 1
if lineIdx >= MAXLINE then
linebuf[cand] = NULL — end the string
print linebuf
do something to move remnants to front of line (memmove?)
fi
od
Уже поздно, и у меня просто был пояс, поэтому могут быть недостатки, но он показывает общую идею - загрузить буфер и скопировать содержимое буфера в строковый буфер, отслеживая возможные контрольные точки. Когда вы приблизитесь к концу, используйте точку останова.
Очевидная проблема заключается в том, что вы статически выделяете «массив» и никогда не проверяете пределы индекса при доступе к нему. Переполнение буфера в ожидании. На самом деле, вы никогда не сбрасываете переменную i в первом цикле, поэтому я не совсем понимаю, как должна работать программа. Похоже, что вы сохраняете весь ввод в памяти до того, как напечатать его в переносе слов?
Итак, предложения: объедините два цикла вместе и напечатайте вывод для каждой завершенной строки. Затем вы можете повторно использовать массив для следующей строки.
Да, и лучше имена переменных и некоторые комментарии. Я понятия не имею, что должен делать «DELIM».