c-为什么会出现分段故障



我刚开始学习C,需要一些帮助。我已经编译了我的代码并修复了所有出现的警告。然而,当我运行我的程序时,它会显示"分段错误",这就是我的代码。

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

char *sorting(char word[51], int n) 
{
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
if (word[i] > word[j]) {
char temp = word[i];
word[i] = word[j];
word[j] = temp;
}
}
}
return word;
}

从上面开始,我只是对单词进行排序,以便在strcmp中使用。

首先,我将阅读包含混乱单词的文件。接下来阅读字典的文件。然后我会检查两个单词是否相同。

int main(int argc, char **dict, char **jambles)
{
const char *j = jambles[1];
FILE *jambles_file = fopen(j, "r");
char jambles_words[51];
while (fgets(jambles_words, sizeof(jambles_words), jambles_file)) {
int count = 0;
const char *d = dict[1];
FILE *dict_file = fopen(d ,"r");
char dict_words[51];
printf("%s", jambles_words);
while (fgets(dict_words, sizeof(dict_words), dict_file)) {
int length_jambles = strlen(jambles_words);
int length_dict = strlen(dict_words);
char *j_ = jambles_words;
char *d_ = dict_words;
const char *sort_jambles = sorting(j_, length_jambles);
const char *sort_dict = sorting(d_, length_dict);
if (length_jambles == length_dict) {
int compare = strcmp(sort_jambles, sort_dict);
if (compare == 0) {
printf("%s", dict_words);
count++;
}
}
else if (count == 0) {
printf("NO MACTHES");
}
}
printf("n");
}
return 0;
}

我仍然不知道我的代码有什么错误,即使我已经在互联网上搜索了分段错误的原因。

我怀疑根本原因是您误解了如何将命令行参数传递给C程序。当您运行./a.out foo bar并调用int main(int argc, char **argv, char **envp)时,"foo"将在argv[1]中,"bar"将在argv[2]中。CCD_ 8将只包含类似"TERM=xterm""PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"的环境变量。您似乎认为"bar"最终会出现在envp[1]中,这是不正确的。

更直接的原因可能是,由于上述原因,对fopen的调用由于名为"TERM=xterm"的文件或不存在的东西而失败,因此返回NULL,然后盲目地将其传递给fgets。一般来说,将空指针传递给任何标准库函数都是未定义的行为,而这些函数并没有明确说明这样做会做什么

相关内容

  • 没有找到相关文章

最新更新