Я довольно новичок в программировании на C/C++, и я стараюсь улучшить свое понимание ввода/вывода файлов. С этой программой я первоначально пытался сделать myFile typedef в C (что явно не сработало), поэтому я перешел на классы на C++ (поэтому ни один из кодов не использует iostream).Аргумент класса C++, отличный от класса, чем аргумент, переданный классу
#include <stdio.h>
#include <stdlib.h>
// required myFile.file=fopen("path","mode");
// read from file: myFile.read(char* out);
// write to file: myFile.write(char* in);
class myFile {
public:
FILE *file;
void open(const char *path, const char *mode) {
file=fopen(path,mode);
}
/*void read(char *out) {
fread(out, sizeof(out[0]), sizeof(out)/sizeof(out[0]*sizeof(char)), file);
}*/
void write(char *in) {
fwrite(in, sizeof(in[0]), sizeof(in)/sizeof(in[0]), file);
printf("%i : %s\n",sizeof(in),in);
}
};
int main(){
myFile file1;
file1.open("/path/test.txt", "w+b");
char fileInput[]={"a b c Test a b c\n"};
file1.write(fileInput);
printf("%i : %s\n",sizeof(fileInput),fileInput);
//fwrite(fIn, sizeof(fIn[0]), sizeof(fIn)/sizeof(fIn[0]), file1.file);
//fprintf(file1.file,"a b c d Test a b c d\n");
fclose(file1.file);
return 0;
}
Когда я пытаюсь передать строку, я хочу, чтобы записать в файл (FileInput) в file1.write(), это, кажется, работает, но файл, который он пишет содержит только первые 8 символов FileInput ,
Printf, размещенный для целей отладки, чтобы показать размер и содержание отказа в записи(), и FileInput, которая передается к нему:
8 : a b c Test a b c 18 : a b c Test a b c
Это становится очевидным, что из меньше, чем FileInput, но содержит то же содержимое (?), которое запутывает, как я предполагал, будет рассматриваться как фактический аргумент, переданный write(), поскольку out является указателем на fileInput.
Можно ли каким-либо образом интерпретироваться так же, как fileInput, или я об этом совершенно неправильно?