Хорошо, я прочитал огромное количество ответов здесь, на SO, и во многих других местах, но я просто не могу понять эту простую функцию. Пожалуйста, простите меня за что-то настолько просто. Я не делал код c/C++ более 8 лет, и я очень стараюсь переучиться, поэтому, пожалуйста, проявите терпение ...Понимание присвоений строк в C
Я пробовал много разных способов для этого нужно назначить строку через параметр функции, переместив значение, чтобы просто вернуть его, но в то время ничего не работает. Я также не получаю ошибок во время компиляции, но я получаю segfaults во время выполнения. Я бы очень хотел узнать, почему следующая функция не работает ... Я просто не понимаю, почему else возвращает штраф как тип char * content, но strcat (content, line); не. Хотя страницы man для strcat показывают, что определение strcat должно быть (char * DEST, const char * SRC). Поскольку я в настоящее время понимаю, что попытка сделать приведение в const char в переменной строки внутри while просто вернет целое число в указатель. Так что я здесь, и мне хотелось бы получить образование у тех, у кого есть время!
char * getPage(char *filename) {
FILE *pFile;
char *content;
pFile = fopen(filename, "r");
if (pFile != NULL) {
syslog(LOG_INFO,"Reading from:%s",filename);
char line [256];
while (fgets(line, sizeof line, pFile) != NULL) {
syslog(LOG_INFO,">>>>>>>Fail Here<<<<<<<");
strcat(content, line);
}
fclose(pFile);
} else {
content = "<!DOCTYPE html><html lang=\"en-US\"><head><title>Test</title></head><body><h1>Does Work</h1></body></html>";
syslog(LOG_INFO,"Reading from:%s failed, serving static response",filename);
}
return content;
}
Очень ценю все замечательные ответы в этом посте. Я бы дал всем в обсуждении галочку, но, к сожалению, я не могу ...
Я смирен; в 19 дополнительных секунд вы перезаписали вещь. Ницца. :) – sarnold
xmalloc не в C - и, честно говоря, у вас закончилась память - что вы собираетесь делать, чтобы восстановить в любом случае? Сбой - лучший вариант. –
Итак, я проследил этот ответ самым легким, поскольку я вижу перераспределение памяти на контенте. Мне пришлось изменить xmalloc и xstrdup как strdup malloc и realloc, но, похоже, он работает нормально. Страницы, которые я буду тянуть, никогда не будут массивными страницами, они, вероятно, никогда не будут превышать 1k даже. Есть проблема с нехваткой памяти и т. Д. @AdrianCornish. –