gpt4 book ai didi

c - 记住最后执行的命令的简单历史记录

转载 作者:行者123 更新时间:2023-11-30 15:34:48 26 4
gpt4 key购买 nike

我正在尝试用c语言模拟shell终端,其中一个功能是提供一个简单的内存来记住执行的最后命令。所以我的做法是:

  • 每次用户输入命令(字符串)时,该字符串都会保存在文件 (command_histroy.txt) 中
  • 如果用户输入“r”(command==“r”),终端将调用函数getSavedCommand(),因为我只保存一个命令,所以我的函数是:

     char* getSavedCommand(void){
    char cmd[1000];
    int i=0;
    char* filename = "files/command_history.txt";

    FILE* file = fopen(filename,"r");
    if(file!=NULL){
    int c;
    do{
    c = fgetc(file);
    cmd[i]=c;
    i++;
    } while (c != EOF);
    }else{
    puts("Error Reading file");
    }
    return cmd;
    }

因此,在文件“command_history.txt”中,只存储了一行,我重新假设它将在字符数组中返回这一行。为了测试我打印了结果:

    cmd = getSavedCommand();
printf("|%s|",cmd);

我得到的结果是:

   arj@arj-Inspiron-1545:~/projet$ ./a.out 
|ls -l /home/arj
�|
arj@arj-Inspiron-1545:~/projet$

我想要的是:

         |ls -l /home/arj|

我认为 EOF 造成了问题。有人可以帮助我吗?

最佳答案

问题之一是您在返回之前没有以 null 终止数组。最后需要类似 cmd[i] = '\0' 的内容。

一个更严重的问题是您返回一个指向对象的指针,该对象在函数返回时被销毁。 cmd 对象具有自动存储功能,并在函数结束时被销毁。使用 malloc 分配数组,或将指向数组的指针作为 getSavedFunction 的参数传递。

关于c - 记住最后执行的命令的简单历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170466/

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