1) Избегайте формата строки без ширины, такого как "%[aeiou]"
- он подвержен переполнению.
2) Проверьте scanf()
возвращаемое значение.
Чтобы избежать ограничений, таких как 10, считывайте ввод в цикле.
int main(void) {
char z[10];
while (scanf("%9[aeiou]",z) == 1) {
printf("%s",z);
}
printf("\n");
return 0;
}
Если код должен читать ввод, например xxxaxxxaxxx
, и выводить aa
только с scanf()
, требуется больше работы.
Чтобы было ясно, scanf()
не лучший инструмент для достижения этой цели.
Некоторое непроверенное представление о том, что нужно.
int main(void) {
do {
int cnt;
char z[10];
while ((cnt = scanf("%9[aeiou]",z)) == 1) {
printf("%s",z);
}
if (cnt == EOF) {
break;
}
// Find the character that stopped scanning
if ((cnt = scanf("%1[^aeiou]",z)) == 1) {
if (z[0] == '\n') {
break;
}
} else {
break;
}
}
printf("\n");
return 0;
}
Или Вы не запускаете потоков на методе OnStart, чтобы сделать работу, или существует исключение, повышенное в рамках Вашего метода OnStart.
, Если исключение выдается, это появится в Windows Event log. Windows Event log является хорошим местом для запуска в любом случае.
Обычно метод OnStart похож на это:
Thread _thread;
protected override void OnStart(string[] args)
{
// Comment in to debug
// Debugger.Break()
// Do initial setup and initialization
Setup();
// Kick off a thread to do work
_thread = new Thread(new MyClass().MyMethod)
_thread.Start();
// Exit this method to indicate the service has started
}
Это конкретное сообщение об ошибке означает, что оно говорит о том, что ваша служба запустилась , но затем довольно скоро вышла из по какой-то причине. Хорошей новостью является то, что ваш сервис на самом деле что-то делает , , поэтому у вас настроен исполняемый файл и он работает как сервис.
Однажды начавшись, по какой-то причине он уходит. Вам нужно выяснить, почему это так. Добавьте некоторую отладку, чтобы сообщить вам, что она работает и известны случаи выхода. Если это не выявляет проблему, добавьте отладку, чтобы вы знали, что она все еще работает и работает в обратном направлении с момента остановки.
Вы прослеживаете отладочную информацию? Скорее всего, исключение выдается во время Вашей инициализации. Я проследил бы все Ваши исключения и использовал бы Debugview для просмотра их.
У меня возникла та же проблема при запуске JBoss, затем я изменил переменную JAVA_HOME
, она работала для меня. Это была версия JBoss, которая не поддерживает 1.6, она поддерживает 1.5.
В моем случае, метод в моем сервисе вызывался рекурсивно (так как условие завершения не было истинным), и по истечении определенного времени моя служба была остановлена.
У меня была аналогичная проблема , потому что мои журналы событий были заполнены , и служба не могла писать в них. Таким образом, было невозможно выполнить отладку путем поиска сообщений в средстве просмотра событий. Я поставил try / catch и выгружал исключение в файл. Мне пришлось изменить настройки в моих журналах, чтобы заполнять их по мере необходимости, а не каждые 7 дней, и это позволило запустить службы.
Конечно, корень проблемы для меня в том, что у меня проблема с драйвером nVidia, из-за которой мои журналы событий переполняются, и теперь у меня, вероятно, не хватает места на диске, но это уже другая проблема.