我想在LLVM代码中写入读取两个字符串的函数,将它们连接并打印出来。打印和阅读功能在外部库用C写的LLVM字符串输入/输出
我尝试这样做:
declare void @printString(i8*)
declare i8* @readString()
declare i8* @concat(i8*, i8*)
define i32 @main() {
L1:
%v2 = call i8* @readString()
%v4 = call i8* @readString()
%v5 = call i8* @concat(i8* %v2, i8* %v4)
call void @printString(i8* %v5)
%v6 = add i32 0, 0
ret i32 %v6
}
但它抛出:分段故障(核心转储) 我想我需要做一些bitcasting,有什么建议?
编辑:这是我如何实现我的C函数:
void printString(char* s)
{
printf("%s\n", s);
return;
}
char* readString()
{
char* tmp;
scanf("%s", tmp);
return tmp;
}
char* concat(char* s1, char* s2)
{
char* t = malloc(strlen(s1)+strlen(s2)+1);
return strcat(strcpy(t,s1),s2);
}
你确定你的C函数能正常工作吗? – sepp2k 2015-02-07 12:28:24
它会抛出段错误吗?当你编译你的代码,或运行它? – arrowd 2015-02-07 16:12:43
是的,当我运行llvm代码 – niczka 2015-02-07 22:34:54