Я пытаюсь разделить строку на две строки разделителем с этим кодомРазбивает строку на две строки по разделителю
int indexOf(char *msg, char c) {
int i;
for (i = 0; msg[i] != '\0'; i++) {
if (msg[i] == c)
return i;
}
return -1;
}
char *substring(char *msg, int startIndex, int endIndex) {
int length = endIndex - startIndex;
char *input = (char *)malloc(length * sizeof(char) + 1);
int i;
for (i = startIndex; i != endIndex; i++) {
input[i - startIndex] = msg[i];
}
input[endIndex] = '\0';
return input;
}
В main
у меня есть:
index = indexOf(msg, ':');
first = substring(line, 0, index - 1);
second = substring(line, index + 2, strlen(line));
Этот код производит правильный выход, когда я Test это с valgrind. Подстрока, выделенная во второй переменной, вызывает ошибку.
Где находится проблема? Есть ли другой способ разделить строку на две строки?
char *msg = readMessage(stdin);
index = indexOf(msg, '\n');
char *line, *first, *second;
line = substring(msg, 0, index);
конец Valgrind Address 0x5203a52 is 5 bytes after a block of size 13 alloc'd
EDIT: Существует еще одна ошибка для
index = indexOf(line, ':');
Теперь ошибка Valgrind в подстроки в строке input[endIndex] = '\0';
:
Invalid write of size 1
EDIT: Решение моего кода, что есть две ошибки
в главном
index = indexOf(msg, ':');
должен быть
index = indexOf(line, ':');
и в подстроки
input[endIndex] = '\0';
должен быть
input[length] = '\0';
спасибо всем
Какая ошибка? И, кстати, не бросайте 'malloc'. – coredump
Вы также забрасываете 'malloc', если это не' strlen (msg) '? Куда входит «линия»? – t0mm13b
может посмотреть в 'strtok'? Всегда инициализируйте переменные указателя на 'NULL' для здравомыслия. Вы отлаживали это? Что такое код для 'readMessage'? Я думаю, что переменная указателя, возвращаемая из функции, становится сбитой, поскольку она выделяется в стеке функции. – t0mm13b