LinuxForum.Fans
Тема

Ошибка сегментирования

Автор: Drayzer 45 сообщений 6028 просмотров
#230114

Привет всем! Хочу отсортировать в алфавитном порядке строку badc, компиляция успешна, при запуске программы Ошибка сегментирования...Вот мой код:

text

include<stdio.h>
#include<stdlib.h>
#define SIZE 4

char Bubble(char *s, int len);

void main() { int i; char *s="badc"; Bubble(s,SIZE); for (i=0; i<SIZE; i++) printf("%s ", s[i]); }

char Bubble(char *s, int len) { int i,j,buf; for(i=1; i<len-1; i++) { for(j=0; j<len-i; j++) if (s[j]>s[j+1]) { buf=s[j]; s[j]=s[j+1]; s[j+1]=buf; } } }

#230130

Сделайте так:

text

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 4

void Bubble(char *s, int len);

int main(){ int i; char buf[10],s[8]="badc"; Bubble(s,SIZE);*buf=0; for (i=0; i<SIZE; i++)sprintf(buf+strlen(buf),"%c ", s[i]); fprintf(stdout,"%s\n",buf); return 0;}

void Bubble(char *s, int len) ......

Пётр.

#230134

1

text

printf("%s  ", s[i]);

надо поменять на

printf("%с ", s[i]);

2

text

int i,j,buf;

надо поменять на

int i,j; char buf;

Петр, нафига s[8]?

#230144
Drayzer написал:
char *s="badc";

"badc" это константа. Константа, это неизменяемая НИКОГДА переменная.
ну а вы её меняете. (потому-что s это вовсе не строка, а адрес константной строки).

пишите так:

text
int main()
{
 char *cs = "badc";
 size_t len = strlen(cs);
 char *s = malloc(len + 1);
 strcpy(s, cs);
 bubble(s, len);
 for (i=0; i<len; i++)
   printf("%c  ", s[i]);
 free(s);
 return 0;
}
#230145
voral написал:
char s[SIZE+1]="badc";
Peter написал:
s[8]="badc";

facepalm.jpg

#230147

кстати, что у вас за компилятор? Что void main проглатывает?

#230148

и да, в сортировке ошибка.

#230149
drBatty написал:
facepalm.jpg

Успел.... заснять плюху :lol:

#230151
voral написал:
кстати, что у вас за компилятор?

вы лучше скажите, что У ВАС за компилятор, что s[8]="xzxz" проглатывает? Это питонотред?

#230152
drBatty написал:
"badc" это константа. Константа, это неизменяемая НИКОГДА переменная.

черт...... точно фйеспалм..... пойду ка я отдыхать..........

#230153
drBatty написал:
вы лучше скажите, что У ВАС за компилятор, что s[8]="xzxz" проглатывает? Это питонотред?

Как бы я это даже не пытался писать, не то что компилировать

#230154

Drayzer, макрос SIZE не нужен. Подумайте, как вы его зададите для строки

text
"jkssssssssjkjdddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeejjjkejejwjkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjdjdjdjddkkkkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
#230155
voral написал:
пойду ка я отдыхать..........

бывает. Я тоже не сразу заметил.

#230156

Вариант

char s[SIZE+1]="abvf";

для учебных целей вполне годный.

#230157
voral написал:
Вариант
char s[SIZE+1]="abvf";

да? пробовали?

#230158

ага вот только что

#230160
voral написал:
для учебных целей вполне годный.

вот не надо самому себе грабли подкладывать, тем более в учебных целях.

#230161
drBatty написал:
вот не надо самому себе грабли подкладывать, тем более в учебных целях.

Ну вы взгляните в букварь. В какой последовательности обычно обучают.... Динамическое выделение памяти идет позже.

#230162
voral написал:
ага вот только что

на инициализации сработает. Теперь объясняйте ТСу разницу между инициализацией и присваиванием.

Войдите или зарегистрируйтесь, чтобы ответить.