Я делаю программу, которая берет стандартный текстовый файл и преобразует его в документ HTML. по большей части он работает нормально, и я просто сейчас улучшаю его функциональность, но есть одна странная вещь, которая происходит, когда я сохраняю заголовок в массив строк / символов для последующей печати. 6 символов, случайным образом определяемые магической силой каждый раз, когда я запускаю двоичный файл, добавляются в начало строки "title".
Вот код, который, по моему мнению, является проблемой:
char title[128]; /*handles the title of the webpage*/
printf("Creating file %s", htmlname);
/*begins creating the first open-tags, from the doctype to <title>*/
puttag(html, "!DOCTYPE html");
puttag(html, "html");
puttag(html, "head");
puttag(html, "title");
/*reads the start of txt until it finds a newline; prints all characters it finds along the way*/
ch = fgetc(txt);
while (ch != '\n')
{
fprintf(html, "%c", ch);
addchar(title, ch);
ch = fgetc(txt);
}
/*closes <title> and <head>; opens <body>*/
closetag(html, "title");
closetag(html, "head");
puttag(html, "body");
/*puts string "title" in <h1> tags*/
puttag(html, "h1");
fprintf(html, "%s", title);
closetag(html, "h1");
/*FUNCTION DEFINITIONS*/
/*puts string "tag" in <> brackets and prints it into fp*/
void puttag(FILE *fp, char *tag)
{
fprintf(fp, "\n<%s>\n", tag);
}
/*puts string "tag in </> brackets and prints it into fp"*/
void closetag(FILE *fp, char *tag)
{
fprintf(fp, "\n</%s>\n", tag);
}
/*adds character "ch" to string "str"*/
void addchar(char *str, char ch)
{
int i = strlen(str);
str[i] = ch;
str[i + 1] = '\0';
}
и вывод, созданный этим фрагментом кода, выглядит следующим образом:
<!DOCTYPE html>
<html>
<head>
<title>
This is the title
</title>
</head>
<body>
<h1>
p6+��This is the title
</h1>
Я новичок в C и абсолютно не знаю, почему это происходит, поэтому я прошу прощения, если это слишком много или слишком мало примеров для определения проблемы.
Одна вещь, которую я заметил, это то, что эта проблема появилась только тогда, когда я добавлял более поздние части кода в программу, хотя я абсолютно уверен, что у них ничего нет делать с этим вопросом. Это единственное место, где используется эта строка, и строки после этого кода вообще не используются (кроме случаев, когда я проверяю, какова длина строки, когда возвращается 23, 6 символов длиннее, чем фактическая длина заголовка ). Другое дело, что иногда, возможно, при первой компиляции после перезапуска (?) Программа возвращает правильную строку. Я не очень много исследовал.
Если кто-нибудь знает, что происходит, помощь будет принята с благодарностью.