[英]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.