您好,我正在尝试用 C 语言创建一个程序,该程序应该从另一个文件中读取值并将它们显示在另一个文件中,但有一些例外。我遇到的问题是分割错误,当我尝试读取结果数组中空的一部分时,就会发生这种情况。我的 For 循环扫描文件中的每一行,如果此特定文件中的一行符合我的需求,则其值应保存在数组中。此数组应打印在第二个.txt文件中。我想打印数组的一些值以进行测试。我想这是我的数组或指针中的错误。
/* Die Konstanten:
* int MAX_LAENGE_STR - die maximale String Länge
* int MAX_LAENGE_ARR - die maximale Array Länge
* sind input3.c auf jeweils 255 und 100 definiert
*/
int main(int argc, char **argv) {
if (argc < 3) {
printf("Aufruf: %s <anzahl> <bundesland>n", argv[0]);
printf("Beispiel: %s 100 Bayernn", argv[0]);
printf("Klein-/Großschreibung beachten!n");
exit(1);
}
int anzahl = atoi(argv[1]);
char *bundesland = argv[2];
// Statisch allokierter Speicher
char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR];
char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR];
int bewohner[MAX_LAENGE_ARR];
int len = read_file("staedte.csv", staedte, laender, bewohner);
// Hier implementieren
int j;
char** result = (char *) malloc (MAX_LAENGE_ARR * sizeof(char));
if (result == NULL) {
perror("malloc failed while allocating memory");
exit(1);
}
for (int i = 0; i < len; i++) {
if (strcmp(bundesland, laender[i]) == 0 && *bewohner > anzahl) {
result[i] = malloc(MAX_LAENGE_STR * sizeof(char));
if (result == NULL) {
perror("malloc failed while allocating memory");
exit(1);
}
snprintf(result[i], MAX_LAENGE_ARR, "Die Stadt %s hat %d Einwohner.", staedte[i], bewohner[i]);
//printf("%sn", result[i]);
}
}
printf("%s", result[0]);
// Mithilfe von write_file(...) soll das Ergebnis in die "resultat.txt"
// geschrieben werden.
write_file(result, len);
// Dynamisch allozierter Speicher muss hier freigegeben werden.
}
您分配result
不正确。您正在分配MAX_LAENGE_ARR*sizeof(char)
字节。您需要分配 MAX_LAENGE_ARR*sizeof(char *)
个字节。此外,您将malloc
的返回值强制转换为错误的类型。如果在打开警告的情况下进行编译,编译器应已捕获此错误。但是,您不需要在 C 中强制转换 malloc
的返回值。我是否施放了马洛克的结果?
char** result = malloc (MAX_LAENGE_ARR * sizeof(*result));
另外,我认为您需要将MAX_LAENGE_ARR
替换为以下行中的MAX_LAENGE_STR
:
snprintf(result[i], MAX_LAENGE_ARR, "Die Stadt %s hat %d Einwohner.", staedte[i], bewohner[i]);