Ошибка этапа выполнения - 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];
};
};
};
};
Объяснение кода листинга программы
- В функции split() происходит разделение строки на две части по заданному символу (в данном случае пробел).
- В функции length() подсчитывается длина строки.
- В функции main() создаются три строки (string1, string2, string) и инициализируются массивы.
- Вызывается функция split(), которая разделяет строку на две части и сохраняет их в string1 и string2.
- Выводится вторая часть (string2) с помощью функции printf().
- Устанавливается локальная настройка для вывода с помощью функции setlocale().
- Функция main() возвращает 0, что означает успешное завершение программы.