У меня проблемы с вводом текста в массив символов. Он работал нормально, когда я устанавливал статический размер для массива, например
char speech[15000];
но это было неэффективно, поэтому я попытался использовать вместо этого calloc. Это заставило его перестать работать. Массив существует нужного размера, но в него ничего не записывается. Вот соответствующий код. Что я делаю неправильно?
int main() {
FILE* inFile;
int i;
int count = 0;
printf("\nOpening file April_30_1789.txt\n");
inFile = fopen("./speeches/April_30_1789.txt", "r");
if(inFile == NULL) {
printf("Could not find April_30_1789.txt\n");
return -1;
}
char ch;
while((ch = fgetc(inFile) != EOF)) count++;
rewind(inFile);
int size = count;
printf("Size of the array is %d\n", size);
char *speech = (char *)malloc(size*sizeof(char) + 1*sizeof(char));
fscanf(inFile, "%s", speech);
printf("Closing the file.\n");
fclose(inFile);
printf("%s", speech);
printf("\n\nDone\n");
return 0;
}
В настоящее время это дает мне
Opening file April_30_1789.txt
Size of the array is 8617
Closing the file.
Fellow-Citizens
Done
fscanf
в формате"%s"
будет считываться до первого обнаруженного пробела. Например, если я использую ваш код для печати моего файла main.c, на самом деле печатается только#include
. 28.03.2014fread
сохранит форматирование. Да, кстати, эту строкуwhile((ch = fgetc(inFile) != EOF)) count++;
нужно переписать какwhile((ch = fgetc(inFile)) != EOF) count++;
. 28.03.2014