gpt4 book ai didi

c - 使用od命令

转载 作者:行者123 更新时间:2023-11-30 21:23:00 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[]) {
char *filename = argv[1];
char *store = malloc(2);

FILE *fh = fopen(filename, "wb");


for(int i = 0; i < 100; i++) {
sprintf(store, "%u", i);

if (fh != NULL) {
fwrite (store, sizeof (store), 1, fh);
}
}

fclose (fh);

return 0;
}

我希望我的输出看起来像这样 -> https://imgur.com/a/nt2ly 。它当前产生的输出都是垃圾。

最佳答案

产生垃圾的真正原因是 fwrite 语句中的数据大小

fwrite (store, sizeof (store), 1, fh);

sizeof(store) 不是字符串的大小。它是指针的大小。

此外,为 store 分配 2 个字节是错误的。您忘记了作为字符串的 2 位数字需要空终止符的空间,因此您写的一个字符太多了。

更多的小问题:为什么要在循环中针对 NULL 测试句柄?在这种情况下你可以退出。

同时测试参数长度 (argc)。

int main(int argc, char* argv[]) {
if (argc<2) exit(1); // protect against missing arg
char *filename = argv[1];
char store[50]; // use auto memory, faster & simpler, don't be shy on the size, don't shave it too close

FILE *fh = fopen(filename, "wb");
if (fh != NULL) { // test file handle here, not in the loop

for(int i = 0; i < 100; i++) {
// sprintf returns the number of printed chars, use this
// also use the proper format specifier for int
int nb_printed = sprintf(store, "%d", i);
// you may want to check the return value of fwrite...
fwrite (store, nb_printed, 1, fh);

}

fclose (fh);

return 0;
}

请注意,此代码将创建一个二进制文件,其中所有数字都已整理:

01234567891011...

很难用。我将执行 sprintf(store, "%d ", i); 来代替在数字之间添加间距。

另请注意,如果您想在文件中写入字符,最好使用:

fprintf(fh,"%d ",i);

(但我认为重点是学习使用fwrite)

关于c - 使用od命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49287015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com