Я работаю над простым веб-сервером в C, и всякий раз, когда я пытаюсь написать char [], который я объявил в основном в другой функции, я получаю segfault. Прежде чем кто-либо предложит, я не объявил его строковым литералом. Я пробовал выделять с помощью malloc(), устанавливая каждый символ в массиве нулевым терминатором при инициализации и не инициализируя его ничем (т. Е. Он не читается до тех пор, пока в него не будет записано что-то новое, поэтому нет причины для нуля это ни к чему изначально), все безрезультатно.Почему я получаю segfault с этим кодом при использовании snprintf?
Синтаксис того, что происходит следующим образом:
#define MAX_BUFFER_LENGTH 20
int some_function(char *buffer) { //many other params as well
//lots of other code
snprintf(buffer, MAX_BUFFER_LENGTH, "%s", "HTTP/1.0 404 Not Found"); // This is where the segfault is thrown
}
int main(int argc, char *argv[]) {
char buffer[MAX_BUFFER_LENGTH];
//many other declarations
//...
some_function(buffer);
}
Странная вещь, это происходит только выдаёт ошибку сегментации в первый раз, что я называю запись в буфер с определенным синтаксисом. Есть несколько запросов, которые не создают segfault. Если я отправляю запросы, которые вызывают segfault после тех, которые этого не делают, они больше не вызывают segfault. Любое понимание?
'полукокса * Buffer [MAX_BUFFER_LENGTH];' -> 'полукокса буфера [MAX_BUFFER_LENGTH];' – BLUEPIXY
Чтение сообщений об ошибках компилятора. Если вы его не видите, вам нужно перенастроить свой компилятор –
извините, у меня на самом деле была опечатка в том, что я спросил выше. Это не массив указателей; Я изменил код, чтобы отразить то, что у меня есть, что дает мне проблему. Кроме того, для кого-то интересно, я компилирую с -Wall. – Kw3si