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();
}
Выделить память для хранения символов.
#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;
}
Я предполагаю, что часть вашей проблемы состоит в том, что списки параметров не совпадают.
int (* length)();
и
int length(PString * self)
не совпадают. Это должно быть int (* length) (PString *);
.
... воах, это Джон!
Edit : и, как указано ниже, ваш указатель на структуру никогда не установить, чтобы указать на что угодно. То, как вы это делаете, будет работать только в том случае, если вы объявите простую структуру, а не указатель.
str = (PString *)malloc(sizeof(PString));
Указатель str
никогда не выделяется. Перед использованием должно быть malloc
'd.
Может быть, я что-то здесь не хватает, но выделяли ли вы какую-либо память для этой строки PString до того, как открыли ее?
PString * initializeString() {
PString *str;
str = (PString *) malloc(sizeof(PString));
str->length = &length;
return str;
}