繁体   English   中英

使用printf在yacc中打印字符串文字标记会导致分段错误

[英]Printing a string literal token in yacc using printf causes a segmentation fault

我正在尝试在Yacc中使用char指针打印字符串,但是当我尝试打印时会出现段错误。 在lex文件中,它看起来像:

\"([^"]|\\\")*\" {yylval.s = strdup(yytext); yycolumn += yyleng; return(STRINGnumber);}

我收到的字符串文字看起来像:

//Used to store the string literal
char * s;
//To store it I call
strcpy(s, $1); //Where $1 is the string literal

每当我打电话

printf("%s", s);

它给了我一个分割错误。 为什么要这样做以及如何解决?

您的词法分析器返回一个指向包含该字符串的已分配内存1的指针,因此您可能要做的就是复制该指针:

s = $1;

除了您无法提供足够的背景信息来查看您实际尝试执行的操作外,还有其他很难说的。

发生分段错误是因为您试图将字符串从strdup分配的内存复制到s指向的内存,但是您从未初始化s指向任何内容。


1 strdup函数调用malloc为要复制的字符串分配足够的存储空间

您必须分配char * s

#include <stdlib.h>
#include <string.h>

// in your function
s = malloc(sizeof(char) * (strlen($1) + 1));
strcpy(s, $1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM