簡體   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