我正在努力实现动态内存分配,而且我不知道下面的代码逻辑有什么问题。 有人可以给我一个解释并改错吗。
struct Books {
char *title = new char[0];
char *author;
int pages = 0;
int price = 0;
};
int main()
{
struct Books book;
/*char size = (char)malloc(sizeof(book.title));*/
printf("The title of the book is:\n");
fgets(book.title, sizeof(book.title), stdin);
printf("The title is:\n %s", book.title);
}
答案 0 :(得分:1)
这是编写代码以使其成为合法C的方法
struct Books {
char *title;
char *author;
int pages;
int price;
};
int main()
{
struct Books book;
book.title = malloc(100);
printf("The title of the book is:\n");
fgets(book.title, 100, stdin);
printf("The title is:\n %s", book.title);
}
任何有关C的书都会介绍这一点,您确实应该读一本书。
答案 1 :(得分:0)
通常有两种方法可以处理这样的情况:您可以使用具有预定义大小的char数组,在这种情况下,必须确保写入的字符数不要超过数组可以容纳的字符数。具有预定义大小的数组的代码如下所示:
struct Books {
char title[255];
char author[255];
int pages;
int price;
};
int main()
{
struct Books book;
printf("The title of the book is:\n");
fgets(book.title, sizeof(book.title), stdin);
printf("The title is:\n %s", book.title);
}
在上述情况下,使用sizeof(book.title)是有效的,因为在编译时已知大小。但是“标题”不能超过254个字符。
另一种方法是使用动态内存分配:
struct Books {
char * title;
char * author;
int pages;
int price;
};
int main()
{
struct Books book;
book.title = NULL;
size_t n = 0;
printf("The title of the book is:\n");
getline(&book.title, &n, stdin);
printf("The title is:\n %s", book.title);
free(book.title);
}
在这种情况下,getline()函数为您分配内存,因此没有预定义的最大字符串大小。但是您必须自己释放它,也不能使用sizeof()来获取数组的大小。
答案 2 :(得分:0)
我做了一些更改。 我真正想要的是在文件中键入一个结构,我附带了下面的代码,但我不太了解其背后的逻辑,出了什么问题。
public void onResponse(String response) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response);
YourModelClass objModel = gson.fromJson(jsonObject.getJSONObject("data").toString(), YourModelClass.class);
} catch (JSONException e) {
e.printStackTrace();
}
}