我正在尝试在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);
这给了我一个分割错误。为什么要这样做以及如何解决?
答案 0 :(得分:3)
您的词法分析器返回指向包含该字符串的已分配内存 1 的指针,因此您可能要做的就是复制指针:
s = $1;
很难说的更多,因为您没有提供足够的上下文来查看您实际要做什么。
发生分段错误是因为您试图将字符串从strdup分配的内存复制到s
所指向的内存,但是却从未初始化s
来指向任何内容。
1 strdup
函数调用malloc为要复制的字符串分配足够的存储空间
答案 1 :(得分:0)
您必须分配char * s
#include <stdlib.h>
#include <string.h>
// in your function
s = malloc(sizeof(char) * (strlen($1) + 1));
strcpy(s, $1);