Tag: fwrite

将char指针编写为文件问题的结构成员

我有一个struct成员作为char *并将其分配给结构初始化的字符串文字“John”,如下所示。 字符串打印精细与printf。 但是,如果我使用fwrite将此字符串写入文件,则在文件中我读回垃圾。 如果我使用char数组而不是char *(如图所示在结构中注释掉),并将其写入文件,我可以按预期读回文件中的字符串。 我无法理解这一点。 在两种情况下都不应该使用指针并将正确的字符串写入文件? 此外,如果我声明一个单独的char *并将其指向字符串文字并将其写入文件,我可以按预期读回。 非常感谢您提供任何解释方面的帮助。 (我在Windows上使用带有Mingw编译器的codeblocks IDE)。 更新:包括使用的实际代码 int main() { struct person { //char name[20]; char* name; int age; }; struct person p1 = {“John”, 25}; printf(“%s\n”, p1.name); FILE* fp = fopen(“test.txt”, “w”); fwrite(&p1, 1, 10, fp); return 0; }

fread’ing和fwrite’ing包含指针的结构

gcc (GCC) 4.7.0 c89 你好, 我有以下结构,我试图fwrite和fread。 但是,因为我的设备和资源是指针。 fwrite将读取指针值而不是数据。 我不能将数组用于设备或资源。 只有指针,因为它们必须动态分配。 在写之前,我为结构元素分配了所有内存。 这里没有显示,因为我想保持片段简短。 也不是自由的。 在我的fread函数中,我为设备和资源分配内存,以便fread将读入这些内存位置。 但是,这不起作用。 做这个的最好方式是什么? 非常感谢任何建议, struct data { int id; int set; char *device; char *resource; }; struct database { struct data **db_data; size_t database_rows; size_t database_data_size; }; int database_write(FILE *fp, const struct database *db) { rewind(fp); if(fwrite(*db->db_data, sizeof(struct data), 1, fp) == […]

在C中使用带有相同标志的fopen打开文件

我无法理解这段代码的输出? int main() { FILE* f, *f1; f = fopen(“mytext”, “w”); if ((f1 = fopen(“mytext”, “w”)) == 0) printf(“unable\n”); fprintf(f, “hello\n”); fprintf(f1, “hi\n”); return 0; } OUTPUT是mytext文件中的hello 。 为什么不写? “无法”不打印到标准输出 。

fwrite是否在内部调用任何锁?

在solaris中,当我将dbx连接到其中一个正在运行的堆栈时,我发现调用fwrite导致__lll_lock_wait()? 在什么情况下会发生这种情况? fwrite内部是否尝试获取锁定?

使用fwrite()将结构写入文件

我有以下程序: #include #include #include #define MAXLEN 100 typedef struct {int key; char data[MAXLEN];} record; main(int argc, char *argv[]) { int n, i; record x; FILE *fp; fp = fopen(argv[1], “w+”); printf(“How many records will be entered? \n”); scanf(“%d”, &n); for (i=0; i<n; i++) { printf("Enter record: \n"); scanf("%d", &x.key); scanf("%s", &x.data); fwrite(&x, sizeof(record), 1, fp); […]

为什么fwrite的写作比我说的要多?

FILE *out=fopen64(“text.txt”,”w+”); unsigned int write; char *outbuf=new char[write]; //fill outbuf printf(“%i\n”,ftello64(out)); fwrite(outbuf,sizeof(char),write,out); printf(“%i\n”,write); printf(“%i\n”,ftello64(out)); 输出: 0 25755 25868 到底是怎么回事? write设置为25755,我告诉fwrite将多个字节写入文件,这是在开头,然后我在25755以外的位置?

fwrite() – 大小和计数对性能的影响

关于fwrite()中两个参数’size’和’count’的目的似乎有很多混淆。 我想弄清哪个会更快 – fwrite(source, 1, 50000, destination); 要么 fwrite(source, 50000, 1, destination); 这是我的代码中的一个重要决定,因为此命令将执行数百万次。 现在,我可以跳转到测试并使用提供更好结果的那个,但问题是该代码适用于多个平台。 所以, 如何才能获得跨平台更好的答案? fwrite()的实现逻辑会因平台而异吗? 我意识到有类似的问题( fread / fwrite将大小和计数作为参数的原理是什么? fwrite和写入大小的性能 )但是要明白这是关于同一问题的另一个问题。 在这种情况下,类似问题的答案是不够的。

如何写一个整数到一个文件(fprintf和fwrite之间的差异)

我一直在尝试写一个整数到一个文件(打开模式是w)。 fprintf写得正确,但fwrite写了乱码: int length; char * word = “word”; counter = strlen(word); fwrite(&length, sizeof(int), 1, file); fwrite(word, sizeof(char), length, file); 并且文件中的结果是: 字 但如果我改用fprintf,就像这样: int length; char * word = “word”; counter = strlen(firstWord); fprintf(file, “%d”, counter); fwrite(word, sizeof(char), length, file); 我在文件中得到了这个结果: 4word 任何人都可以告诉我做错了什么? 谢谢! 更新:我最终想把写入改为二进制(我将以wb模式打开文件),我的实现会有区别吗?

在C中使用fwrite时,文件大小限制为2GB?

我有一个简短的C程序写入文件,直到磁盘上没有更多的空间: #include int main(void) { char c[] = “abcdefghij”; size_t rez; FILE *f = fopen(“filldisk.dat”, “wb”); while (1) { rez = fwrite(c, 1, sizeof(c), f); if (!rez) break; } fclose(f); return 0; } 当我运行程序(在Linux中)时,它会在文件达到2GB时停止。 由于FILE结构,是否存在内部限制? 谢谢。

如何获取结构数据的hexdump

…. finalize(char *hdrs, sendip_data *headers[], int index, sendip_data *data, sendip_data *pack) { …….. 出于调试目的,我想要data和pack结构的hex转储,其类型为sendip_data ,这是一个非常复杂的结构。 实际上它们包含一些二进制信息,所以我不确定我的项目的输出是否正确。 因此,出于调试目的,我想将数据写入文件,以便我可以使用hexdump,如下所示 – $hexdump -C file.txt 另外因为这是一个/ w数据包的运行时生成所以我也不确定data和pack结构的长度,我认为fread / fwrite将需要..所以请给我一些建议。