无法将shell历史记录写入文本文件

时间:2018-03-08 12:11:18

标签: c

我目前正在编写一个带有C语言基本功能的shell,通过Unix运行。我将历史命令数组转移到文本文件时遇到了困难。

历史记录存储为指向数组的指针,容量为20,以免过于复杂。我在网上获得了该方法的基础,所以我试图根据我的需要定制它,但它只是将一堆奇怪的字符输入到文本文件中。 有谁知道为什么会发生这种情况?/我能做些什么来解决它?

我也不确定for循环是否必要。

提前致谢!

char *history[2];

void save(char ** history)
{
 FILE *f;
 f = fopen("history.txt", "w+");

 for(int i = 0; i < 20; i++)
 {
    fwrite (history, sizeof(history[i]), sizeof(history)/sizeof(history[i]), f);
 }

 fclose(f);
}

1 个答案:

答案 0 :(得分:3)

  

历史

是一个char **,是一个pointertype。

  

历史[I]

char*,所以仍然是一个pointertype

  

的sizeof(历史)/的sizeof(历史[I])

总是返回一个,因为所有的pointertype都应该具有相同的大小。

因此,您的写入语句将打印sizeof(< anypointer >)随机字符。

<强>解决方案

for(int i = 0; i < 20; i++){
    fwrite (history[i], sizeof(*history[i]), strlen(history[i]) + 1, f);
}

注意:这将包括&#39; \ 0&#39;对于每个字符串。

注意:这会将内部状态写入文件,因此您应该考虑以二进制模式打开它或使用:

fputs(history[i], f);
fputc('\n', f); /*or anything similar*/