Во-первых, возьми ответ @ Bohemian, это то, что ты хочешь. и любые будущие гугл. Это не работает, потому что у вас есть ошибка: D (именно поэтому мы все приходим к переполнению стека, в зависимости от вашего определения ошибки)
SimpleEntry simpleEntry = new SimpleEntry ("", ""); strike>
...
actionMap.put (stringkey, simpleEntry strike> entry );
это помогает?
Вы используете размер указателя на буфер (4 байта), а не размер буфера.
В C необходимо передать размер буфера отдельно, который является частью причины, переполнение буфера происходит так легко и часто.
void load_buffer(char * buffer, size_t bufSize)
{
...
}
Ответы Mitch Wheat и hhafez являются абсолютно правильными и к точке. Я собираюсь показать некоторую дополнительную информацию, которая может оказаться полезной иногда.
Обратите внимание, что то же происходит, если Вы говорите компилятору, что у Вас есть массив правильного размера
void load_buffer(char buffer[100]) {
/* prints 4 too! */
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
Массив как параметр просто объявляет указатель. Компилятор автоматически изменяет это на char *name
даже если это было объявлено как char name[N]
.
Если Вы хотите вынудить вызывающие стороны передать массив размера 100 только, можно принять адрес массива (и тип того) вместо этого:
void load_buffer(char (*buffer)[100]) {
/* prints 100 */
printf("sizeof(buffer): %d\n", sizeof(*buffer));
}
Это - указатель на массив, который Вы имеете в основном, таким образом, необходимо разыменовать в функции для получения массива. Индексация затем сделана
buffer[0][N] or (*buffer)[N]
Никто, которого я знаю, не делает это, и я ни не делаю его сам, потому что это скорее усложняет передачу аргумента. Но хорошо знать об этом. Можно вызвать функцию как это затем
load_buffer(&buffer)
Если бы Вы хотите принять другие размеры также, я пошел бы с передающей-N опцией, которую рекомендуют другие два ответа.
От OP
void load_buffer(char *buffer) { printf("sizeof(buffer): %d\n", sizeof(buffer)); }
Даже при том, что можно вообразить это load_buffer()
передается buffer
ссылкой, что действительно происходит, Вы, передают указатель на char
значением. Фактический массив не передается, таким образом, нет никакого пути к load_buffer()
функция для знания размера буферного массива
Таким образом, что sizeof(buffer)
выполнение? Это просто возвращает размер указателя для обугливания. Если load_buffer()
нуждается в размере buffer
это должно быть передано speratly.
Или можно создать новую структуру, которая содержит и массив символов и размер массива, и передайте указатель на ту структуру вместо этого, тот путь буфер, и это - размер, всегда вместе ;)
То, что происходит, когда Вы передаете массив функции, Вы только передаете адрес массива в памяти, не размер массива. То, что sizeof (буфер) производит в load_buffer () является размером указателя, который составляет четыре байта.
Лучший способ сохранить размер буфера в функции состоит в том, чтобы изменить функцию на:
void load_buffer(char *buffer, int length);
и вызов к:
load_buffer(buffer, sizeof(buffer));
и затем используйте длину каждый раз, когда Вы хотите размер буфера.