Самый легкий метод, вероятно, был бы методом AddRange.
Dim Foo as String = "a,b,c,d,e"
Dim Boo as List(of String)
Boo.AddRange(Foo.Split(","c))
Printf буферизуется.
Вы можете заставить printf «очистить» свой буфер с помощью вызова fflush:
#include <stdio.h>
#define MAXLEN 256
int main() {
int n;
char buf[MAXLEN];
while((n = read(0,buf,sizeof(buf))) != 0){
printf("n: %d:",n);
fflush(stdout); /* force it to go out */
write(1,buf,n);
}
return 1;
}
В общем, буферизация printf ()
- это хорошо. Небуферизованный вывод, особенно для видимых консолей, требующих обновления экрана и т.п., выполняется медленно. Достаточно медленный, чтобы приложение, которое много печатает, могло быть напрямую замедлено им (особенно на платформе Windows; Linux и unix обычно менее подвержены влиянию).
Однако, Буферизация printf ()
укусит вас, если вы также fprintf (stderr,)
- stderr
намеренно не буферизуете. Как следствие, вы можете получать сообщения с пропущенными некоторыми printf ()
; если вы пишете в другой дескриптор FILE
, который также связан с терминалом и может быть небуферизован, убедитесь, что вы сначала явно fflush (stdout)
.
Printf использует stdio и буферизируется. Вытолкните его, отправив изменение на "n:% d: \ n"
Справочная страница для fgets сообщает мне:
Не рекомендуется смешивать вызовы функций ввода из stdio библиотека с низкоуровневыми вызовами read (2) для ассоциированного дескриптора файла с входным потоком; результаты будут неопределенными и очень вероятно не то, что вы хотите.
Таким образом, лучшим решением было бы не использовать write и printf для одного и того же дескриптора.
Используйте fwrite (потоковую версию) вместо записи.
Обратите внимание, что, хотя это связано с файлом номер 1, это не одно и то же.