17 AĞUSTOS 2010, Salı
C satırı ile dosya satır okumak
Bu fonksiyonu bir dosyadan bir satır okumak için yazdım
const char *readLine(FILE *file) {
if (file == NULL) {
printf("Error: file pointer is null.");
exit(1);
}
int maximumLineLength = 128;
char *lineBuffer = (char *)malloc(sizeof(char) * maximumLineLength);
if (lineBuffer == NULL) {
printf("Error allocating memory for line buffer.");
exit(1);
}
char ch = getc(file);
int count = 0;
while ((ch != '\n') && (ch != EOF)) {
if (count == maximumLineLength) {
maximumLineLength = 128;
lineBuffer = realloc(lineBuffer, maximumLineLength);
if (lineBuffer == NULL) {
printf("Error reallocating space for line buffer.");
exit(1);
}
}
lineBuffer[count] = ch;
count ;
ch = getc(file);
}
lineBuffer[count] = '\0';
char line[count 1];
strncpy(line, lineBuffer, (count 1));
free(lineBuffer);
const char *constLine = line;
return constLine;
}
İşlevi doğru dosyayı okur ve basit bir beşgen kullanmaktır kullanarak constLine dize doğru olarak okumak yaptığını görüyorum.
Eğer bu işlev örneğin kullanırsam ancak:
while (!feof(myFile)) {
const char *line = readLine(myFile);
printf("%s\n", line);
}
printf anlamsız çıkışlar. Neden?
CEVAP
17 AĞUSTOS 2010, Salı
Eğer senin görevin değil icat, satır satır okuma fonksiyonu, ama sadece okumak için dosyayı satır satır kullanabilirsiniz tipik bir kod parçacığı içeren getline()
fonksiyon (bakınız El Kitabı, Sayfa http://linux.die.net/man/3/getline):
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
fp = fopen("/etc/motd", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1) {
printf("Retrieved line of length %zu :\n", read);
printf("%s", line);
}
fclose(fp);
if (line)
free(line);
exit(EXIT_SUCCESS);
}
Bunu PaylaÅŸ:
C satırı ile dosya satır okumak...
Ne kadar büyük dosya okumak için pytho...
Nasıl bir dosya satır okumak için php ...
Txt her satırı yeni bir dizi öğe için ...
Python: okuma diziye satır satır dosya...