C 无法将shell历史记录写入文本文件
我目前正在用C编写一个shell,它的基本功能是通过Unix操作的。我很难将一系列历史记录命令传输到文本文件 历史记录存储为指向数组的指针,容量为20,以免使事情过于复杂。我在网上得到了这个方法的基础,所以我试着根据我的需要来定制它,但是它只是给文本文件提供了一堆奇怪的字符。 有人知道为什么会发生这种情况吗?/我能做些什么来解决它 我也不确定for循环是否必要 提前谢谢C 无法将shell历史记录写入文本文件,c,C,我目前正在用C编写一个shell,它的基本功能是通过Unix操作的。我很难将一系列历史记录命令传输到文本文件 历史记录存储为指向数组的指针,容量为20,以免使事情过于复杂。我在网上得到了这个方法的基础,所以我试着根据我的需要来定制它,但是它只是给文本文件提供了一堆奇怪的字符。 有人知道为什么会发生这种情况吗?/我能做些什么来解决它 我也不确定for循环是否必要 提前谢谢 char *history[2]; void save(char ** history) { FILE *f; f =
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);
}
char*历史[2];
作废保存(字符**历史记录)
{
文件*f;
f=fopen(“history.txt”,“w+”);
对于(int i=0;i<20;i++)
{
fwrite(history,sizeof(history[i]),sizeof(history)/sizeof(history[i]),f;
}
fclose(f);
}
历史
是一个字符**
,它是一个指针类型
历史[i]
是char*
,因此仍然是指针类型
sizeof(历史)/sizeof(历史[i])
始终返回一,因为所有指针类型的大小应相同
因此,write语句将打印sizeof()
随机字符
解决方案
for(int i = 0; i < 20; i++){
fwrite (history[i], sizeof(*history[i]), strlen(history[i]) + 1, f);
}
历史
是一个字符**
,它是一个指针类型
历史[i]
是char*
,因此仍然是指针类型
sizeof(历史)/sizeof(历史[i])
始终返回一,因为所有指针类型的大小应相同
因此,write语句将打印sizeof()
随机字符
解决方案
for(int i = 0; i < 20; i++){
fwrite (history[i], sizeof(*history[i]), strlen(history[i]) + 1, f);
}
我建议首先使用printf将其运行到控制台,使用调试器,您将注意到指针处理历史的问题…(即删除fwrite,并在printf或sprintf的帮助下进行调试)请检查指针的使用情况以及参数的内容是否可疑。请在函数中打印此内容,并检查它是否符合您的预期:
sizeof(history)
fwrite
用于写入二进制数据。如果需要文本文件,请使用fprintf
代码>但是您的循环正在访问history[i]
中的i
值,最多为19。这不太好。我建议先用printf将其运行到控制台,使用调试器,您会发现指针处理历史时出现问题…(即删除fwrite,并在printf或sprintf的帮助下进行调试)请检查指针的使用情况以及参数的内容是否可疑。请在函数中打印此内容,并检查它是否符合您的预期:sizeof(history)
fwrite
用于写入二进制数据。如果需要文本文件,请使用fprintf
代码>但是您的循环正在访问history[i]
中的i
值,最多为19。那可不好。