我目前正在编写一个带有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);
}
答案 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*/