我想從文件中讀取字符串並將它們插入到矩陣中。每一行都是一個字。錯誤動態創建字符串數組
FILE *fp = fopen("zadanie4.txt","r");
if(fp == NULL)
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
int symbol, num_of_lines = 0, len_of_string = 0, max_len = 0;
do {
symbol = fgetc(fp);
len_of_string++;
if (symbol == '\n' || feof(fp)) {
num_of_lines++;
if(len_of_string > max_len){
max_len = len_of_string;
}
len_of_string = 0;
}
} while (symbol != EOF);
fclose(fp);
printf("Number of words: %d\n", num_of_lines);
printf("Longest word: %d\n", max_len);
fp = fopen("zadanie4.txt","r");
char (*arr)[num_of_lines] = calloc(num_of_lines, sizeof(char*) * max_len);
int index = 0;
while(fscanf(fp, "%s", arr[index++]) == 1) {
printf("%s\n", arr[index - 1]); //first check to see what is written into array
}
close(fp);
printf("--------------------------\n");
int i;
for(i = 0; i < num_of_lines; i++){
printf("%s\n", arr[i]); //second check
}
我找出最長的字符串的大小,並分配內存的字符串數*最長的字符串。
下面是輸出的樣子,如果最長的單詞是5(+1空 '\ 0'):
Number of words: 6
Longest word: 6
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
FFFFF
--------------------------
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
FFFFF
如果我添加其他字符到每一行:
Number of words: 6
Longest word: 7
AAAAAa
BBBBBb
CCCCCc
DDDDDd
EEEEEe
FFFFFf
--------------------------
AAAAAaBBBBBbCCCCCcDDDDDdEEEEEeFFFFFf
BBBBBbCCCCCcDDDDDdEEEEEeFFFFFf
CCCCCcDDDDDdEEEEEeFFFFFf
DDDDDdEEEEEeFFFFFf
EEEEEeFFFFFf
FFFFFf
注:在這個例子中,每個字符串都是相同的大小,但我希望它能夠處理各種大小。
任何人都可以幫助我如何正確地分配這個數組的內存?
我試圖改變它,因爲你寫了,但是現在我得到了'munmap_chunk():無效指針'。 – Wlad
@Wlad然後你正在做一些你沒有向我們展示的東西。你是否在陣列上調用'free'?如果你有真正的數組,就沒有必要。只有'free'是你的'malloc'(直接或間接的,例如'calloc')。 –
這樣的錯誤完全可能是由程序執行中的早期alloc/free錯誤引起的。我建議使用像valgrind這樣的malloc調試器來查找這些... – BadZen