解决。谢谢lutogniew .....只是让它变得复杂......
所以我在完成家庭作业时遇到了一些麻烦。分配是接收一个文件(仅使用系统调用),将其反转并写入包含反转数据的输出文件(仅限ASCII)。一个问题是反向部分必须用指针完成。我在下面做了以下,这确实有效。但是,它不使用指针反转。
我的问题是,我是如何使用指针访问data []之类的东西?或者,我如何从文件中读取它。我尝试的所有内容(主要是char **)只读取null。
非常感谢任何帮助。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int main(void)
{
int i = 0;
int fileOut = open("output.txt", O_WRONLY | O_APPEND);
int fileIn = open("input.txt", O_RDONLY);
int start = lseek(fileIn, 0 , SEEK_CUR);
int end = lseek(fileIn, 0 , SEEK_END);
int restart = lseek(fileIn, 0-end , SEEK_CUR);
char data[end];
char reverseData[end];
read(fileIn, data, end);
for(i = 0; i< end; i++){
reverseData[i] = data[end-(i+1)];
}
write(fileOut, reverseData, end);
return 0;
}
答案 0 :(得分:2)
接受答复后。
OP需要考虑另一种方法:
为了好玩,一种不那么严重的递归方法来反转文件。
void reverse(int fileIn, int fileOut) {
char data;
if (read(fileIn, &data, 1) == 1) {
reverse(fileIn, fileOut);
write(fileOut, &data, 1);
}
}
int main(void) {
int fileOut = open("output.txt", O_WRONLY | O_APPEND);
int fileIn = open("input.txt", O_RDONLY);
reverse(fileIn, fileOut);
close(fileIn);
close(fileOut);
return 0;
}
答案 1 :(得分:0)
你必须明白在C中作为数组呈现给你的东西,实际上只是一个指针,指向属于该数组的内存的开头。这个片段应该让一切都清楚:
int test[] = { 1, 2, 3 };
int* ptr = test + 2; // ptr now points to the third element
修改强>
至于将数据加载到数组中:再次记住,数组本身只是一个内存池(缓冲区) - 它从上面提到的指针指向的地方开始,其大小等于numberOfElements
* sizeOfSingleElement
。现在看一下read
函数的签名:
size_t read(int fildes, void* buf, size_t nbytes);
它将nbytes
读入buf
指向的缓冲区。敲响了铃声?