Эта программа предназначена для сортировки слов в алфавитном порядке, либо вложенных в нее слов, либо из текстового файла. Он компилируется просто отлично, но когда я его запускаю, я получаю большую массу текста. Вот небольшой пример: :*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36: v=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
Это похоже на некоторые форматы файлов или что-то в этом роде?
За этим следуют слова:
Segmentation fault (core dumped)
Я комментирую GCC на Ubuntu.
Программа:Ошибка сегментации с большой непонятной ошибкой?
#include <stdio.h>
#include <string.h>
#define MO 109 // 109 is ASCII for "m".
#define FO 102 // 102 is ASCII for "f".
#define OO 101 // 101 is ASCII for "e" and denotes an error.
int main() // Main part of program.
{
int i, j; // Counter integer assignment.
int n = 100; // assignment of integer for the number of strings.
char a; // For the m/f (manual or file) option.
char str[100][100]; // Str is the main string to be sorted.
char temp[100]; // Temp is to switch the values for bubble sorting.
for(i = 0; i < 1; a = OO)
{
printf("To input text manually, press m. To sort a file, press f. \n");
// M/f option.
scanf("%c", &a); // Gets m/f option.
if(a == MO || a == FO) // Checks for valid input.
{
i = 2; // Escape from loop with valid input.
}
if(a != MO && a != FO) // Invalid input.
{
printf("Please insert a valid response. ");
i = 0; // Continue loop until a valid input is reached.
}
}
if(a == MO) // Manual insert option.
{
puts("Enter the number of strings to be sorted.");
scanf("%d", &n); // Gets number of strings.
for(i = 0; i <= n; i++)
{
gets(str[i]); // Gets strings from user.
}
}
if(a == FO) // File option.
{
char b[100]; // File address of text file to be sorted.
FILE * f; // Text file.
printf("Enter file path of file to be sorted.");
scanf("%c", b); // Gets file path.
f = fopen(b, "r"); // Opens file.
fgets(*str, 100, f); // Coverts file into string str.
fclose(f); // Closes file.
}
for(i = 0; i <= n; i++) // Begin bubble sort.
{
for(j = i + 1; j <= n; j++)
{
if(strcmp(str[i], str[j]) > 0) // Checks alphabetical value.
{
strcpy(temp, str[i]); // Switch two strings.
strcpy(str[i], str[j]);
strcpy(str[j], temp);
}
}
}
printf("The sorted string:");
for(i = 0; i <= n; i++)
{
puts(str[i]); // Prints final output.
}
return 0; // End of main.
}
Поиск Google сказал мне, что ошибка сегментации обычно означает, что я имею в виду место в памяти, не существует. Но я не мог найти никаких советов о том, как это исправить, или даже о том, что проблема конкретно. Если кто-то может мне помочь, я бы очень признателен. Благодарю.
Есть много вещей неправильно с этим кодом. –
Не могли бы вы рассказать мне, что в этом плохого? Я не очень хорош в этом. – user2973526
@ user2973526 Для начала используйте '' m'', '' f'' и '' e'' вместо этих #defines. –