很抱歉,如果这个问题是基本的,但我真的不明白为什么,如果我不添加“+ 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