Задача программирования C, исходный файл html

Поэтому у меня есть эта задача: у меня есть исходный файл, например, веб-сайт новостей, в котором есть метаtags, такие как . И, как вы понимаете, этот исходный файл содержит много информации. Моя задача – найти тег мета-автора и распечатать содержимое экрана этого метатега, теперь это будет «Go Outside». Я даже не знаю, как начать это делать. У меня была одна идея сканировать, как 18 символов, и проверить, требуется ли это метатег, но это не работает, как я думал:

  while(feof(src_file) == 0){ char key[18]; int i = 0; while (i < 18 && (feof(src_file) == 0)){ key[i] = fgetc(src_file); printf("%c", key[i]); i++; } printf("\n%s", key); } 

Проблема в том, что он печатает мусор на этой линии.

Ваша помощь будет оценена, так как я работаю и учился в течение 10 часов подряд, вы могли бы спасти меня от сумасшествия. Благодарю.

    Вам не хватает нулевого конца char -array, чтобы он мог обрабатываться как строка перед ее печатью.

    Модируйте код так:

     ... { char key[18 + 1]; /* add one for the zero-termination */ memset(key, 0, sizeof(key)); /* zero out the whole array, so there is no need to add any zero-terminator in any case */ ... 

    или так:

     ... { char key[18 + 1]; /* add one for the zero-termination */ ... /* read here */ key[18] = '\0'; /* set zero terminator */ printf("\n%s", key); ... 

    Обновить:

    Как упоминалось в моем комментарии к вашему вопросу, есть « другая история », связанная с тем, как используется feof() , что неверно.

    Посмотрите, что цикл чтения завершен только после того, как EOF уже был прочитан в случае ошибки или реального конца файла. Этот псевдо-символ EOF затем добавляется к массиву символов, удерживая результат чтения.

    Вы можете использовать следующую конструкцию для чтения:

     { int c = 0; do { char key[18 + 1]; memset(key, 0, sizeof(key)); size_t i = 0; while ((i < 18) && (EOF != (c = fgetc(src_file)))) { key[i] = c; printf("%c", key[i]); i++; } printf("\n%s\n", key); } while (EOF != c); } /* Arriving here means fgetc() returned EOF. As this can either mean end-of-file was reached **or** an error occurred, ferror() is called to find out what happend: */ if (ferror(src_file)) { fprintf(stderr, "fgetc() failed.\n"); } 

    Для подробного обсуждения этого вопроса вы можете прочитать этот вопрос и его ответы .