Всем традиционный привет!
Это опять я с очередным г#вновопросом
Стоит задача спарсить подстроку по двум меткам. Первая метка обозначает начало подстроки. Вторая метка соответственно конец. Раньше исходную строку закидывал в string и всё работало. Теперь её засунул в char* чтобы закосить под профи
Получил такой код:
#include <Windows.h>
#include <iostream>
#include <cstring>
char* pars_url(char* str, const char* substr_begin, const char* substr_end, int& error) {
// Ищем начальную подстроку
char* start = strstr(str, substr_begin);
if (start == nullptr) {
error = 1; // Начальная подстрока не найдена
return nullptr;
}
// Сдвигаемся по длине начальной подстроки
start += strlen(substr_begin);
// Ищем конечную подстроку
char* end = strstr(start, substr_end);
if (end == nullptr) {
error = 2; // Конечная подстрока не найдена
return nullptr;
}
// Вычисляем длину искомой подстроки
size_t length = end - start;
// Выделяем память для новой строки
char* result = new char[length];
// Копируем найденную подстроку в новую строку без использования strncpy
for (size_t i = 0; i < length; ++i) {
result = start;
}
error = 0; // Успешное выполнение
return result;
}
int main() {
char str[] = "adsfadsip^192.168.0.12^endsfgfdjfdkjf;alk";
const char* substr_begin = "ip^";
const char* substr_end = "^end";
int error;
char* result_ch = pars_url(str, substr_begin, substr_end, error);
if (error == 0) {
std::cout << "Extracted IP: " << result_ch << std::endl;
}
else {
std::cerr << "Error: " << error << std::endl;
}
return 0;
}
На выходе получаю вроде как достаточный результат.

Только что это за еб#нь в конце в виде каких то кругляков? перепроверил размерность переменной result_ch, пробовал разные функции типа strncpy. Результат один. Грёб##ый С++, да простит меня его создатель за такие слова. Целый день убил на казалось бы простую вещь. Под конец дня одни эмоции накопились, сдаюсь.
Подскажите как вытащить подстроку без всяких непонятных излишеств?
P.S. Не могу код отредактировать. При клике по кнопке окрывается какое то левое окно. Так что сорян.
Это опять я с очередным г#вновопросом
Стоит задача спарсить подстроку по двум меткам. Первая метка обозначает начало подстроки. Вторая метка соответственно конец. Раньше исходную строку закидывал в string и всё работало. Теперь её засунул в char* чтобы закосить под профи
#include <Windows.h>
#include <iostream>
#include <cstring>
char* pars_url(char* str, const char* substr_begin, const char* substr_end, int& error) {
// Ищем начальную подстроку
char* start = strstr(str, substr_begin);
if (start == nullptr) {
error = 1; // Начальная подстрока не найдена
return nullptr;
}
// Сдвигаемся по длине начальной подстроки
start += strlen(substr_begin);
// Ищем конечную подстроку
char* end = strstr(start, substr_end);
if (end == nullptr) {
error = 2; // Конечная подстрока не найдена
return nullptr;
}
// Вычисляем длину искомой подстроки
size_t length = end - start;
// Выделяем память для новой строки
char* result = new char[length];
// Копируем найденную подстроку в новую строку без использования strncpy
for (size_t i = 0; i < length; ++i) {
result = start;
}
error = 0; // Успешное выполнение
return result;
}
int main() {
char str[] = "adsfadsip^192.168.0.12^endsfgfdjfdkjf;alk";
const char* substr_begin = "ip^";
const char* substr_end = "^end";
int error;
char* result_ch = pars_url(str, substr_begin, substr_end, error);
if (error == 0) {
std::cout << "Extracted IP: " << result_ch << std::endl;
}
else {
std::cerr << "Error: " << error << std::endl;
}
return 0;
}
На выходе получаю вроде как достаточный результат.

Только что это за еб#нь в конце в виде каких то кругляков? перепроверил размерность переменной result_ch, пробовал разные функции типа strncpy. Результат один. Грёб##ый С++, да простит меня его создатель за такие слова. Целый день убил на казалось бы простую вещь. Под конец дня одни эмоции накопились, сдаюсь.
Подскажите как вытащить подстроку без всяких непонятных излишеств?
P.S. Не могу код отредактировать. При клике по кнопке окрывается какое то левое окно. Так что сорян.
Последнее редактирование: