Поскольку ok
указывает на неинициализированный массив символов, все это будут значения мусора, поэтому место, где начнется сцепление (по strcat
), неизвестно. Также strcat
принимает C-строку (т. Е. Массив символов, оканчивающийся символом «\ 0»). Если задать char a[200] = ""
, вы получите [0] = '\ 0', а затем [1] - [199], равное 0.
Редактировать: (добавлена исправленная версия кода)
#include <stdio.h>
#include <string.h>
char *asd(char* in, char *out)
{
/*
It is incorrect to pass `*in` since it'll give only the character pointed to
by `in`; passing `in` will give the starting address of the array to strcat
*/
strcat(out, in);
return out;
}
int main(){
char st[] = "text";
char ok[200] = "somevalue"; /* 's', 'o', 'm', 'e', 'v', 'a', 'l', 'u', 'e', '\0' */
asd(st, ok);
printf("%s", ok);
return 0;
}