আমি এই ফাংশনটি একটি ফাইল থেকে একটি লাইন পড়তে লিখেছি:
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;
}
ফাংশনটি ফাইলটি সঠিকভাবে পড়ে এবং প্রিন্টফ ব্যবহার করে দেখি কনস্টলাইন স্ট্রিংটিও সঠিকভাবে পড়তে পারে।
তবে আমি যদি ফাংশনটি ব্যবহার করি যেমন:
while (!feof(myFile)) {
const char *line = readLine(myFile);
printf("%s\n", line);
}
প্রিন্টফ আউটপুট গিব্বারিশ। কেন?
getline()
পসিক্স ২০০ of এর একটি অংশ। এটি ছাড়া পসিক্সের মতো প্ল্যাটফর্ম থাকতে পারে, বিশেষত যদি তারা পোসিক্স বাকী ২০০ support সমর্থন না করে তবে পসিক্স সিস্টেমগুলির জগতের মধ্যে, getline()
আজকাল বেশ পোর্টেবল।
fgets
পরিবর্তে ব্যবহার করুনfgetc
। আপনি লাইন বাই লাইনের পরিবর্তে চরিত্রটি পড়ছেন।