delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2002/04/01/10:00:15

X-Authentication-Warning: delorie.com: mailnull set sender to djgpp-bounces using -f
From: "Goh, Yong Kwang" <gohyongkwang AT hotmail DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: Printing out regex matches
Date: Mon, 1 Apr 2002 17:36:12 +0800
Organization: Singapore Telecommunications Ltd
Lines: 69
Message-ID: <a89rvc$p7v$1@violet.singnet.com.sg>
NNTP-Posting-Host: tns01925.singnet.com.sg
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4133.2400
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

I've a problem with printing out the regex matches in the regmatch_t
pmatch[] array returned from a regexec function call.

the code excerpt as below:

void PrintMatch(regmatch_t pmatch[])
{
  int index = 0;
  int so;
  int eo;
  char match[80];

  do{
    so = pmatch[index].rm_so;
    eo = pmatch[index].rm_eo;

    if(so != -1 &&  eo != -1 && so != eo){
      printf("so=%d, eo=%d\n", so, eo);
      strncpy(match, string, (eo - so));
    }
    index++;
  }while(so != -1 && eo != -1 && so != eo);
}

It gives the following output:

D:\TEMP>tyregex
tyregex> = string helloworld <= some command to set variables.
tyregex> = pattern world
tyregex> !
helloworld <= prints out string for diagnostic purpose.
world <= prints out pattern for diagnostic purpose.
OK <= indicates regex compilation OK
OK <= indicates regex execution OK i.e. pattern matches string.
so=132617, eo=0 <= value of so and eo. Printed by PrintMatch.
Exiting due to signal SIGSEGV <= Program starts to bomb out.
General Protection Fault at eip=00008220
eax=0144ff00 ebx=000130cb ecx=01450000 edx=fffdf8fb esi=0144ff04
edi=000131c0
ebp=0144fef0 esp=0144fee8 program=D:\TEMP\TYREGEX.EXE
cs: sel=00af  base=829e0000  limit=0144ffff
ds: sel=00b7  base=829e0000  limit=0144ffff
es: sel=00b7  base=829e0000  limit=0144ffff
fs: sel=0087  base=0000ffa0  limit=0000ffff
gs: sel=00c7  base=00000000  limit=ffffffff
ss: sel=00b7  base=829e0000  limit=0144ffff

Call frame traceback EIPs:
  0x00008220
  0x000024e6

D:\TEMP>

One thing weird about it is that 'so' is supposed to store the starting
offset and 'eo' the ending offset of the match in the original string. But
how could the starting offset be more than the ending offset? it doesn't
make sense and is obviously wrong.
--
Yong-Kwang Goh
Singapore
gohyongkwang AT hotmail DOT com


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.342 / Virus Database: 189 - Release Date: 3/14/02


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019