我有一个大学项目,我必须写一个工人数据库。我决定使用动态结构数组:
$http({url: "export/download/" + exportitem.exportId, withCredentials: true})
.then(function(response) {
function str2bytes(str) {
var bytes = new Uint8Array(str.length);
for (var i=0; i<str.length; i++) {
bytes[i] = str.charCodeAt(i);
}
return bytes;
}
var blob = new Blob([str2bytes(response.data)], {type: 'application/octet-stream'});
FileSaver.saveAs(blob, "download.zip");
}, $exceptionHandler);
功能菜单
@RequestMapping(value = "/download/{id}", method = RequestMethod.GET)
public void download(final HttpServletRequest request,
final HttpServletResponse response,
@PathVariable("id") final int id) throws IOException {
// Pseudo-code for retrieving file from ID.
Path zippath = getZipFile(id);
if (!Files.exists(zippath)) {
throw new IOException("File not found.");
}
response.setContentType("application/zip");
response.setHeader("Content-Disposition",
"attachment; filename=download.zip");
InputStream inputStream = new FileInputStream(zippath.toFile());
org.apache.commons.io.IOUtils.copy(inputStream, response.getOutputStream());
response.flushBuffer();
inputStream.close();
}
决定我们想做什么,例如写作&#34;添加&#34;将启动我的问题功能,该功能应该添加新记录
struct data
{
char id[50];
char name[50];
char surname[50];
char account_num[50];
double net_pension,taxed_pension;
};
int main()
{
int current_size=0;
struct data *database;//creating a table
database=(struct data*)malloc(1*sizeof(struct data));//memory allocation
menu(database);//running menu
return 0;
}
函数modify_size reallocs memory,does_exist确保id是唯一的,accgnum,num和word检查给定规则的输入。当你第一次使用功能时,它们都能很好地工作。但是在你尝试添加第二个&#34;记录添加&#34;不显示和功能从一开始添加运行。我不知道为什么。这是主要问题。第二个是菜单,因为当你输入&#34; print&#34;它运行add_element。转换输入的代码是:
void menu(struct data *database)
{
int current_size=1;
int input=0;
char inpt[512];
do
{
printf("Input function or input help for list of avaible commands \n");
fgets(inpt,511,stdin);
input=mod_input(inpt);
if(input==404)
{
printf("Function does not exist \n");
}
else if(input==1)
{
print_result(database,current_size);
}
else if(input==2)
{
add_element(database,¤t_size);
}
else if(input==3)
{
modify_element(database,current_size);
}
else if(input==4)
{
sort_table(database, current_size);
}
else if(input==5)
{
search(database,current_size);
}
else if(input==6)
{
hilfe();
}
else if(input==7)
{
search_by_col(database,current_size);
}
input=8;
}
while(input!=0);
}
提前感谢您的帮助。我也知道有些部分可以做得更好,但就目前而言,我试图强迫它发挥作用。 整个计划 lab3.c和header
答案 0 :(得分:1)
直观地说,你需要做的是传递指向数组指针的指针,而不只是指向它的指针。这就是BLUEPIXY在评论中试图得到的东西。
问题在于,如果你x = realloc(y, new_size)
,那么x不能保证x等于y。
特别是,子例程中的database = realloc(database, new_size)
可能会使子例程与database
的值不同,而是作为参数传入的值。 调用者仍具有数据库的旧值。
结果未定义,可能包括比你得到的更糟糕。
你想要的是
struct data *datap;
struct data **database = &datap;
*database = malloc(sizeof(struct data))
相应的更改一直向下 - 基本上是通过数据库,并在到达那个阶段时设置*database = realloc(...)
。
另外,请确保同时正确更新*size
。