Я хочу написать в функции кода 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, какими-либо советы?
EDIT: Это, как я реализовал мои 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
Он бросает segfault, когда? Когда вы компилируете свой код или запускаете его? – arrowd
Да, когда я запускаю код llvm – niczka