c - 字符串正在打印奇怪的字符 - lex 中的 c 代码

标签 c string char lex dynamic-allocation

下面是 lex 中的 C 代码。我有三个输入字符串,如下所示。前两个正确打印出来。在第三个输入字符串的末尾,打印了两个奇怪的字符。我知道这是因为空字符。但我的代码会处理它,而我的前两个输入字符串不会发生这种情况。

第一个输入字符串:(c,a,b,ma,mb,low) 第二个输入字符串:(c,a,b,ma,mb+1,low) 第三个输入字符串:(c,data, istart, mid,BASE)

当代码执行时,func_initial_var 将根据字符串包含“(”,而 func_var 将包含字符串的其余部分。

问题仅出在第三个输入字符串上。假设如果我在第三个字符串的末尾添加两个额外的字符,它会正确打印,我猜有两个额外的空间被分配了。我的问题是为什么只在第三个输入字符串中?为什么不在前两个?请帮忙。从昨天早上开始,这一直困扰着我。谢谢。

    char *func_var = "";
    char *func_initial_var = "";

<SOME_STATE>.       { char c;
                    func_initial_var = strdup(yytext);
                    c = input();
                    func_var = (char*) malloc(sizeof(char));
                    for(q=0;;q++) {
                        if(c == ')')
                        {
                          func_var[q] = c;
                          printf("%s\n",func_var);
                          BEGIN SOME_STATE_X;
                          break;
                        }
                    func_var[q] = c;
                    printf("%s\n",func_var);
                    temp_func = (char*) realloc(func_var,(q+2)*sizeof(char));
                    if(temp_func != NULL) 
                        {
                        func_var = temp_func;
                        } else {
                      free(func_var);
                      printf("Error allocating memory\n");
                      return 1;
                        }
                    c = input();
                      }
                    }

最佳答案

您可以尝试分配更多内存,例如:

func_var = (char*) malloc(sizeof(char)* strlen(func_initial_var));

在您的代码中,您分配了 4 个字节(字符大小)

关于c - 字符串正在打印奇怪的字符 - lex 中的 c 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885244/

相关文章:

c - 使用dup,pipe,fifo与子进程通信

java - 如何使字符串的字节大小相同

java - 在Java中如何对带有整数的字符串进行排序?

regex - T SQL 模式或正则表达式,以确保为 varchar 列返回的所有行都严格是字母数字

CRC32 算法/C 实现,没有查找表和公共(public)许可证

c++ - 添加两个 float 时出现意外输出

c - Lua 5.2 无法访问 C 库中的函数

ios - 用换行符替换多个空格,但保留单个空格

c++ - 从 cin 获取输入并将其存储在 char 变量中

c - Arduino - 如何将 char* 复制到 char**?