我是编程方面的新手,尤其是beforeDestroy: function(borrow, next){
return Book.find({id:borrow.product})
.then(function(){
Book.update(borrow.product, {'isBorrowed' : false})
})
.then(function(){
next();
})
.catch(function(error){
next(error);
});
}
。
我正在尝试编写一个使用结构数组的程序,但是如果该结构包含字符串,我遇到了问题。
在用户给出最后一个输入后,编译器会以某种方式崩溃。
下面的结构只是一个只包含一个项目的简化版本,因为问题似乎是将字符串读入数组。 非常感谢任何帮助,在此先感谢。
C
答案 0 :(得分:6)
在输入scanf("%s" , all[i].name);
之前,您需要将内存分配给all[i].name
。
一个例子 -
for(i=0;i<size;i++)
{
all[i].name=malloc(20*sizeof(*(all[i].name)));
if(all[i].name!=NULL){
printf("enter name\n");
scanf("%19s" , all[i].name);
}
}
//use these strings
for(i=0;i<size;i++){
free(all[i].name); //free the allocated memory
}
free(all);
在您的结构中 或而不是char *
,将name
声明为char
数组(如果您不想使用动态分配) -
typedef struct{
char name[20]; //give any desired size
}student;
/* no need to free in this case */
答案 1 :(得分:0)
没有为学生姓名(char* name
)分配内存,因此在尝试scanf
指向该指针时,会访问无效内存并导致程序崩溃。
最简单的方法是将name
声明为数组:char name[28];
如果在为malloc()
分配内存时出现问题,则需要检查students
的返回值,这将返回NULL pointer
。最后,需要使用free()
释放分配的内存。
例如:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[28];
unsigned int age;
} student;
int main()
{
size_t size = 0;
printf("\nEnter number of entries: ");
scanf("%zu", &size);
// add some check for size
student* students = (student*)malloc(size * sizeof(student));
if (students == NULL) {
printf("\nProblem with allocating memory:\n"
" - size: %zu\n"
" - total size needed: %zu\n",
size, size * sizeof(student));
return 0;
}
for (size_t i = 0; i < size; ++i) {
printf("Enter name: ");
scanf("%27s", students[i].name);
printf(" Enter age: ");
scanf("%u", &students[i].age);
}
printf("\nList of students:\n");
for (size_t i = 0; i < size; ++i) {
printf("%s (%u)\n", students[i].name, students[i].age);
}
free(students); // free the allocated memory
return 0;
}