C-程序无法正确打印

时间:2018-12-17 09:49:52

标签: c++ memory

我正在努力实现动态内存分配,而且我不知道下面的代码逻辑有什么问题。 有人可以给我一个解释并改错吗。

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);

}

3 个答案:

答案 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();
  }
}