gpt4 book ai didi

c - 当我在 C 中更改目录时出现段错误

转载 作者:行者123 更新时间:2023-11-30 21:04:44 24 4
gpt4 key购买 nike

我想制作一个程序来模仿 UNIX 中 cd 的使用。显然,最好的选择是chdir。然而,当用户输入 cd/home 时,我得到了段错误。当我使用 gdb 时,它打印:

Program received signal SIGSEGV, Segmentation fault. __rawmemchr_avx2 () at ../sysdeps/x86_64/multiarch/memchr-avx2.S:61
61 ../sysdeps/x86_64/multiarch/memchr-avx2.S: The file of directory does not exist.

代码如下所示:

void cd(char buff[]){
if(chdir(buff)==-1){
printf("Problem with directory\n");
}
}

int main(int argc, char *argv[]){
char* token;
char buffer[256];

printf("Welcome user\n");
sscanf("%s",buffer);
token=strtok(buff," ");
if(strcmp(token,"cd")==0||strcmp(token,"cd\n")==0){
cd(strtok(NULL," ");
}

return 0;
}

比你花时间。

最佳答案

您在提供的代码中犯了一些语法和逻辑错误,例如 main() 中的 buff 而不是 buffer 以及sscanf 而不是 scanf 用于给出输入字符串。

此外,您编写了 cd(strtok(NULL,""); 但此语句编译时缺少右大括号: cd(strtok(NULL,"")); .

我已经更正了代码,并且输出文件在我的平台上运行良好 - 在 Ubuntu GNU/Linux 上使用 GCC。

这是更正后的代码:

#include <stdio.h>
#include <string.h>
#include <unistd.h>

void cd(char buff[]){
if(chdir(buff)==-1){
printf("Problem with directory\n");
}
}

int main(int argc, char *argv[]){
char* token;
char buffer[256];

printf("Welcome user\n");
scanf("%s",buffer);
token=strtok(buffer," ");
if(strcmp(token,"cd")==0||strcmp(token,"cd\n")==0){
cd(strtok(NULL," "));
}

return 0;
}

用这个试试。

关于c - 当我在 C 中更改目录时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60016074/

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