很抱歉,如果這個問題是基本的,但我真的不明白爲什麼,如果我不添加「+ 1」節目不打印所有的字母試圖瞭解如何做的realloc和malloc函數工作
a = realloc(a,sizeof(char)*(i + 1));
以及在這裏
*(A + I)= letra;
「a」的位置在每次通過時是否變大? 我認爲情況並非如此,但我不太確定。
#include <stdio.h>
#include <stdlib.h>
char *copiarFrase();
int main()
{
char *frase;
frase = copiarFrase();
printf("Frase: %s", frase);
free(frase);
return 0;
}
char *copiarFrase()
{
FILE *archivo;
char letra;
char *a;
int i = 0;
archivo = fopen("frases.txt", "r");
a = malloc(sizeof(char));
letra = fgetc(archivo);
while(letra != EOF)
{
*(a + i) = letra;
i++;
a = realloc(a, sizeof(char)*(i + 1));
letra = fgetc(archivo);
}
return a;
}
你需要知道的唯一真實的事情是這個代碼是多麼可怕,可怕,致命的錯誤。谷歌「realloc o(n)複雜性」找到正確的命中。 –
這看起來像是一個關於c字符串的問題,而不是'malloc'或'realloc'。如果你把'char'數組作爲一個字符串,它必須是'NUL'終止的。 'printf(「%s」);'將繼續打印字符,直到找到一個'\ 0''字符。所以如果你有字符串「Hello」,你實際上需要6個字符來表示字符串(5個字母加上'NUL'終止符)。這就是爲什麼你在爲字符串指定的內存分配上看到+1的原因。 – yano