Sry但我很难删除它 请删除这篇文章
答案 0 :(得分:1)
以下是main()
中提出的解决方案:
更正错误和改进的列表:
1-在格式化输出中,将%p
(专用于指针)替换为%s
(专用于字符串)。
2-存储在输出字符串zeile_array[d]
之前,将其分配给输出文本zeile
的len,包括空终止符。
3-而不是将输出文本指针zeile
复制到输出字符串zeile_array[d]
,使用strcpy()
函数移动所有字符。
4-简化,从char指针修改临时字符串zeile
,通过在堆栈中自动分配的简单char数组在内存中动态分配。
5-保护,在使用数组char *zeile_array[50];
的所有项目时停止提取结果。或者只需使用MAX_LAENGE_ARR
constante分配足够的数组。
// Hier implementieren
int x=0;
int d=0;
//int b=0;
//char* zeile_array=(char*) malloc (len * sizeof(char));
char *zeile_array[MAX_LAENGE_ARR]; // instead of char *zeile_array[50];
char zeile[100];
// zeile=(char*) malloc(100); // allocated memory not needed
for(x=0;x<len;x++)
{
if(strcmp(laender[x],bundesland) == 0 && bewohner[x] >= anzahl)
{
// as Micheal Walz said, replace %p by %s
sprintf(zeile, "Die Stadt %s hat %d Einwohner.",staedte[x],bewohner[x]);
// allocate the storing item
zeile_array[d]=(char *)malloc(strlen(zeile)+1);
// copy the formatted text into the storing item
strcpy(zeile_array[d],zeile); // putting it into array
d=d+1;
// abort research when output array is full
if (d >= MAX_LAENGE_ARR) break;
}
}
//b++;
//} // remove unexpected end of block
write_file(zeile_array,d);
// free the allocated memory only
for(x=0;x<d;x++)
{
free(zeile_array[x]);
}
// free(zeile); is no more needed