<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>I have a struct,<div><br></div><div>typedef struct {</div><div>  char* start_add;</div><div>  char* end_add;</div><div>} string_def;</div><div><br></div><div>I used the example from the documentation,</div><div><br></div><div><div>#include <string.h></div><div>#include <stdio.h></div><div><br></div><div>%%{</div><div>   machine foo;</div><div>   main :=</div><div>        ( 'foo' | 'bar' )</div><div>        0 @{ res = 1; };</div><div>}%%</div><div><br></div><div>%% write data;</div><div><br></div><div><br></div><div>int main()</div><div>{</div><div>  int cs, res = 0;</div><div>  <span style="font-size: 12pt;">char *p = "foo";</span></div><div>  char *pe = p + strlen(p) + 1;</div><div>  %% write init;</div><div>  %% write exec;</div><div>  printf("result = %i\n", res );</div><div>  return 0;</div><div>}</div></div><div><br></div><div>This works fine : " result = 1" is the output.</div><div><br></div><div>If I tweak this a little to work the way my struct is.</div><div><br></div><div><div><div>extern string_def new_string(char* str, int len) {</div><div>  string_def s;</div><div>  s.start_add = str;</div><div>  s.end_add = str + len;</div><div>  return s;</div><div>}</div><div><br></div><div>int main()</div><div>{</div><div>  string_def str = new_string("foo\0", 4); ==> Works</div><div>  // string_def str = new_string("foo", 3); ==> does not work, I WANT THIS TO WORK</div><div>  int cs, res = 0;</div><div>  char *p = str.start_add;</div><div>  char *pe = str.end_add;</div><div>  %% write init;</div><div>  %% write exec;</div><div>  printf("result = %i\n", res );</div><div>  return 0;</div><div>}</div></div></div><div><br></div><div>Is ragel looking for a null character? How to override this behavior??</div>                                       </div></body>
</html>