Ошибка этапа выполнения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Недавно я начал писать функцию, разделяющую строку на две по заданному символу. Возможно, такая функция уже есть в библиотеке, для меня главное - практика. Намучился я с компиляцией, и в конце концов код получился таким:
#include <stdio.h>
#include <locale.h>
 
void split(char *string, char *string1, char *string2, char *symbol);
 
int main()
{
  int num1;
  int num2;
  
  char string1[10];
  char string2[10];
  char string = "Некая строка";
  
  split(string, string1, string2, ' ');
  printf(string2);
  
  setlocale(LC_ALL, "");
  return 0;
  
};

void split(char *string, char *string1, char *string2, char *symbol)
  {
  int a = 0;    
  int i = 0;
  for ( i = 0; i < (sizeof(string) / sizeof(char)); ++i )
  {
    if(string[i] == ' ' )
    {
        while(a < (sizeof(string) / sizeof(char)) - i);
        {
        string1[a] = string[a];
        a++;
        };
        a = 0;
        while(a < (sizeof(string) / sizeof(char)) - i) - (sizeof(string) / sizeof(char));
        {
        string2[a] = string[a];
        };
    };
  };
};
Но эта программа не работает адекватно, и сразу крашится. Мне ясно, что сюда закралась ошибка, но где именно, я не могу понять. Помогите!

Решение задачи: «Ошибка этапа выполнения»

textual
Листинг программы
#include <stdio.h>
#include <locale.h>
 
void split(char *string, char *string1, char *string2, char *symbol);
int length(char *string);
 
int main()
{
  int num1;
  int num2;
  
  char string1[10];
  char string2[10];
  char string = "Некая строка";
  
  split(string, string1, string2, ' ');
  printf(string2);
  
  setlocale(LC_ALL, "");
  return 0;
  
};
 
int length(char *string)
{
    int i = 0;
    while(i == i)
    {
        if(string[i] == '\0')
        {
            break;
        }
        i++;
    };
    return i;
};
 
 
void split(char *string, char *string1, char *string2, char *symbol)
  {
  int a = 0;    
  int i = 0;
  for ( i = 0; i < length(string); ++i )
  {
    if(string[i] == ' ' )
    {
        while(a < length(string) - i);
        {
        string1[a] = string[a];
        a++;
        };
        a = 0;
        while(a < ((length(string) - i) - length(string)));
        {
        string2[a] = string[a];
        };
    };
  };
};

Объяснение кода листинга программы

  1. В функции split() происходит разделение строки на две части по заданному символу (в данном случае пробел).
  2. В функции length() подсчитывается длина строки.
  3. В функции main() создаются три строки (string1, string2, string) и инициализируются массивы.
  4. Вызывается функция split(), которая разделяет строку на две части и сохраняет их в string1 и string2.
  5. Выводится вторая часть (string2) с помощью функции printf().
  6. Устанавливается локальная настройка для вывода с помощью функции setlocale().
  7. Функция main() возвращает 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы