Указатель функции как член структуры C

try (FileOutputStream out = new FileOutputStream(filename)) {
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
    // PNG is a lossless format, the compression factor (100) is ignored
} catch (IOException e) {
    e.printStackTrace();
}
44
задан Jonathan Sterling 29 August 2009 в 03:41
поделиться

4 ответа

Выделить память для хранения символов.

#include <stdio.h>
#include <stdlib.h>

typedef struct PString {
        char *chars;
        int (*length)();
} PString;

int length(PString *self) {
    return strlen(self->chars);
}

PString *initializeString(int n) {
    PString *str = malloc(sizeof(PString));

    str->chars = malloc(sizeof(char) * n);
    str->length = length;

    str[0] = '\0'; //add a null terminator in case the string is used before any other initialization.

    return str;
}

int main() {
    PString *p = initializeString(30);
    strcpy(p->chars, "Hello");
    printf("\n%d", p->length(p));
    return 0;
}
62
ответ дан 26 November 2019 в 22:08
поделиться

Я предполагаю, что часть вашей проблемы состоит в том, что списки параметров не совпадают.

int (* length)();

и

int length(PString * self)

не совпадают. Это должно быть int (* length) (PString *); .

... воах, это Джон!

Edit : и, как указано ниже, ваш указатель на структуру никогда не установить, чтобы указать на что угодно. То, как вы это делаете, будет работать только в том случае, если вы объявите простую структуру, а не указатель.

str = (PString *)malloc(sizeof(PString));
6
ответ дан 26 November 2019 в 22:08
поделиться

Указатель str никогда не выделяется. Перед использованием должно быть malloc 'd.

4
ответ дан 26 November 2019 в 22:08
поделиться

Может быть, я что-то здесь не хватает, но выделяли ли вы какую-либо память для этой строки PString до того, как открыли ее?

PString * initializeString() {
    PString *str;
    str = (PString *) malloc(sizeof(PString));
    str->length = &length;
    return str;
}
4
ответ дан 26 November 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: