почему при печати строки возникает ошибка сегментации (дамп памяти)? - PullRequest
0 голосов
/ 05 декабря 2018

Почему мой код выдает ошибку сегментации (ядро сброшено), я проверил все возможные тестовые случаи.

Input: aaabbcc Output:abc

Input: abbcccccc Output:abc

Он будет печатать тольконеповторяющиеся символы.

#include <stdio.h>
void main()
{
char a[100],c=0;
int i;
scanf("%s",a);
for(i=0;a[i]!="\0";i++)
{
    if(a[i]!=a[i+1])
      printf("%c",a[i]);
}
}

1 Ответ

0 голосов
/ 05 декабря 2018

ваше условие цикла неверно a[i]!="\0" должно быть a[i]!='\0', вам нужно искать '\0' завершение, а "\0" - строка (char *).В идеале, с правильными предупреждениями, вы должны получать предупреждения компиляции.

for(i=0;a[i] != '\0';i++) 
{
    if(a[i]!=a[i+1])
      printf("%c",a[i]);
}

на самом деле лучшим циклом for будет защита от ограничений размеров массива, например, рассмотрим случай, когда ваш ввод больше 100 длинных символов

for(i=0; (a[i] != '\0' ) && ( i < (sizeof a) );i++)
{
    if(a[i]!=a[i+1])
      printf("%c",a[i]);
}
...