最近 GPT-4 给人的回复特别奇怪,有时候牛头不对马嘴,有时候出现错别字,甚至连比较擅长的代码也出错了,各位帮忙看看,它是不是出智障问题了。
我想让它用 C 语言实现 shell 中 mkdir- p
效果的代码,它的回复如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
// 创建目录,如果需要则递归创建父目录
int mkdir_p(const char *path) {
char *copypath = strdup(path);
char *sp; // 用于 strtok_r 的保存指针
char *p = NULL;
int status = 0;
errno = 0;
// strtok_r 需要一个可修改的字符串
for (p = strtok_r(copypath, "/", &sp); p != NULL; p = strtok_r(NULL, "/", &sp)) {
// 在每一个中间步骤上,逐步构建路径
if (p == copypath) { // 特殊处理以斜杠开头的路径
continue;
}
// 逐层路径累加
*(p + (p - copypath) + strlen(p)) = '\0';
// 检查目录是否存在
struct stat st;
if (stat(copypath, &st) != 0) {
// 目录不存在,创建之
if (mkdir(copypath, 0777) != 0 && errno != EEXIST) {
status = -1;
break;
}
} else if (!S_ISDIR(st.st_mode)) {
// 不是目录,抛出错误
status = -1;
break;
}
*(p + (p - copypath) + strlen(p)) = '/'; // 恢复 '/'
}
free(copypath);
return status;
}
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Usage: %s <path>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (mkdir_p(argv[1]) != 0) {
perror("mkdir_p failed");
exit(EXIT_FAILURE);
}
printf("Directories created successfully\n");
return 0;
}
其中的 *(p + (p - copypath) + strlen(p)) = '\0';
应该是有问题,甚至会造成数组越界吧。
V 友们看看是它变智障了,还是我加班加傻了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.