Я пытаюсь выполнить простую обработку строк (strcat) на массиве символов. Я попробовал 2 подхода.
В первом случае я выделяю память для char *, а затем присваиваю значение через scanf (). Этот подход работает нормально.
void fun1(char** s1) {
char temp[15] = "&Superman";
printf("inside fun1 %s %s\n",(*s1),temp);
strcat((*s1),temp);
}
int main()
{
char *str;
str = malloc(sizeof(char)*15);
scanf("%s",str);
fun1(&str);
printf("1st string %s\n",str);
return 0;
}
O / p соответствует ожидаемому для этого случая
Batman
inside fun1 Batman &Superman
1st string Batman&Superman
Во втором подходе я присваиваю значение str непосредственно в основном ( ) без scanf ().
void fun1(char** s1) {
char temp[15] = "&Superman";
printf("inside fun1 %s %s\n",(*s1),temp);
strcat((*s1),temp);
}
int main()
{
char *str;
str = malloc(sizeof(char)*15);
str = "Batman";
fun1(&str);
printf("1st string %s\n",str);
return 0;
}
В этом случае я получаю ошибку сегментации внутри fun1 () во время выполнения strcat.
inside fun1 Batman &Superman
Segmentation fault (core dumped)
GDB o / p из OnlineGDB
(gdb) r
Starting program: /home/a.out
inside fun1 Batman &Superman
Program received signal SIGSEGV, Segmentation fault.
__strcat_sse2_unaligned ()
at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:666
666 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or direc
tory.
(gdb) bt
#0 __strcat_sse2_unaligned ()
at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:666
#1 0x00000000004006a3 in fun1 (s1=0x7fffffffebd8) at main.c:9
#2 0x00000000004006e4 in main () at main.c:17
(gdb)
Я в замешательстве, потому что строка "Batman" может печататься внутри fun1 (), но ее strcat не работает, хотя я делаю одно и то же для обоих случаев.
Заранее спасибо за любую помощь.