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

C 无法将shell历史记录写入文本文件,c,C,我目前正在用C编写一个shell,它的基本功能是通过Unix操作的。我很难将一系列历史记录命令传输到文本文件 历史记录存储为指向数组的指针,容量为20,以免使事情过于复杂。我在网上得到了这个方法的基础,所以我试着根据我的需要来定制它,但是它只是给文本文件提供了一堆奇怪的字符。 有人知道为什么会发生这种情况吗?/我能做些什么来解决它 我也不确定for循环是否必要 提前谢谢 char *history[2]; void save(char ** history) { FILE *f; f =

我目前正在用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);
}
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。那可不好。