Я пытался создать функцию, которая разбивает строку и возвращает указатель на первый элемент массива. Он компилируется без ошибок, но когда я запускаю программу, она сработает. Вот мой код. Любая помощь в том, как это исправить. Благодарю.c массив указателей
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define split_count(a) a
int count(char *str, char *sub) {
int sublen = strlen(sub);
int templen = 0;
int count = 0;
if (sublen > strlen(str))
return 0;
int i, j;
for (i = 0; i < strlen(str); i++) {
if (*(str + i) == *sub) {
templen = 1;
for (j = 1; j < sublen; j++) {
if (*(str + i + j) == *(sub + j)) {
templen += 1;
}
}
if (templen == sublen) {
count += 1;
}
templen = 0;
}
}
return count;
}
char * split(char *str, char *sep, int maxsplit) {
if (!count(str, sep))
return NULL;
char *arr[split_count(count(str, sep)) + 1];
int i, j;
int templen = 0;
int stop = 0;
int counter = 0;
for (i = 0; i < strlen(str); i++) {
if (*(str + i) == *sep) {
templen = 1;
for (j = 1; j < strlen(sep); j++) {
if (*(str + i + j) == *(sep + j)) {
templen += 1;
}
if (templen == strlen(sep)) {
arr[counter] = (char*)malloc(sizeof(char) * strlen(str));
strcpy(arr[counter], "");
int k;
for (k = stop; k < i; k++) {
*(arr[counter] + strlen(arr[counter])) = *(str + k);
*(arr[counter] + strlen(arr[counter])) = '\0';
}
stop = i + strlen(sep);
counter++;
}
}
}
}
return arr[0];
}
int main() {
char *before = "This is a house isisis is";
printf("%s\n", split(before, "is", 1));
return 0;
}
Невозможно скомпилировать его без предупреждений. Вы должны включить предупреждения компиляции. – user694733
И вам не следует многократно называть 'strlen()'. Поскольку 'str' не изменяет свою длину, было бы лучше определить его один раз и использовать это значение. Это экономит время. – glglgl