Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > найти замену strcasestr


Автор: Nab 5.11.2006, 04:36
Компилю прогу под стареньким дистром на ядре 2.0.39, 
единственное место где получился затык это

Код

    toline = (char *)strcasestr(buffer->str, headers[cur_header]);


Порывшись в манах своей системы нашел что это регистронезависимый вариант strstr
сейчас у меня она компилиться и работает вот с такой строчкой
Код

    toline = (char *)strstr(buffer->str, headers[cur_header]);

но из мана 
Код

CONFORMING TO
       The  strstr() function conforms to ISO 9899.  The strcasestr() function
       is a non-standard extension.


то есть проблема именно в этой функции, 
подскажите плиз как ее заменить чтоб функциональность не страдала, и компилилось вот этим
Код

slackware:/mnt/hd1/src/prog-1.00# gcc --version
2.8.1


Какую еще инфу нужно указать?

Просто C не мой родной язык smile.

Автор: MAKCim 5.11.2006, 11:17
Код

#define _GNU_SOURCE
#include <string.h>

#ifndef _GNU_SOURCE
#include "string.h"
#endif

char* find(const char* src, const char* dest) {
#ifdef _GNU_SOURCE
    return strcasestr(src, dest);
#else
    return <своя функция из "string.h" или strstr>
#endif
}

Автор: GrayCardinal 5.11.2006, 12:53
Nab, 
А тупо заменить на while (или for) с проверкой strcasecmp с каждого байта ? Работать будет..........

Добавлено @ 12:54 
ГЫ 
т.е.
while (*ptr) {
  if (! strcasecmp (ptr, "stroka")))
     break; // совпало.
 ++ptr;
}

Автор: MAKCim 5.11.2006, 12:58
GrayCardinal
стандартные то функции на asm-е в libc написаны
все таки они будут более оптимизированы чем код компилятора (даже gcc)
хотя в этом случае ей (оптимизацией) в виду незначительности можно и пренебречь  smile 

Автор: GrayCardinal 5.11.2006, 13:02
MAKCim, 
Ага, аж два раза быстрее, ага, разбежался  smile 
Я на асме под 64-битку переписывал bzero и сравнивал с тупым while.
Разница в скорости - около процента. Я чуть не повешался... Около дня убил шоб на асм переключится, а все зря.


ЗЫ
в тему - gcc до 2.95 в принципе не может нормально компилировать проги. The fact. 

Автор: MAKCim 5.11.2006, 15:20
Цитата

Ага, аж два раза быстрее, ага, разбежался 

Про два раза я не говорил  smile 
Цитата

Разница в скорости - около процента. Я чуть не повешался

Цитата

хотя в этом случае ей (оптимизацией) в виду незначительности можно и пренебречь

Автор: Nab 6.11.2006, 10:49
GrayCardinal, сенкс. Именно то что нужно было.

Искал тупое решение smile потому как прога не самая важная и производительность не главная задача... главное было функционал сохранить smile

Еще раз всем откликнувшимся спасибо...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)