OSDN Git Service

Handle stretches of blanks.
authorSimon Forman <sforman@hushmail.com>
Thu, 2 Feb 2023 01:25:54 +0000 (17:25 -0800)
committerSimon Forman <sforman@hushmail.com>
Thu, 2 Feb 2023 01:25:54 +0000 (17:25 -0800)
Don't create zero-length strings.

implementations/C/parser.c

index f03996f..9285741 100644 (file)
@@ -5,7 +5,7 @@
 
 
 const char *BLANKS = " \t";
-const char *TEXT = " hi there  fr[ie]nd";
+const char *TEXT = " hi there  fr  [  ie]nd";
 /*                  01234567890123456789
                        ^     ^
 */
@@ -32,18 +32,23 @@ main(void)
        while (NULL != rest) {
                 /* How many chars have we got? */
                diff = rest - text;
-                printf("%ld\n", diff);
+                /*printf("%ld\n", diff);*/
 
-                /* Allocate and copy out the substring. */
-                snip = (char *)GC_malloc(diff + 1);
-                strncat(snip, text, diff);
-                printf("%s\n", snip);
+                if (diff) {
+                        /* Allocate and copy out the substring. */
+                        snip = (char *)GC_malloc(diff + 1);
+                        strncat(snip, text, diff);
+                        printf("%s\n", snip);
+                }
 
                 /* The next char is a space or '[' or ']'. */
-                printf("<%c>\n", rest[0]);
+                if ('[' == rest[0] || ']' == rest[0]) {
+                        printf("%c\n", rest[0]);
+                }
 
                 /*  */
                 text = trim_leading_blanks(++rest);
+                /*printf(">>>%s\n\n", text);*/
                 rest = strpbrk(text, " []");
        }
         printf("%s\n", text);