The strange thing is that this code compiles with no warnings:
int
main (void)
{
int i;
char pmbbuf[4];
wchar_t *pwchello = L"1234567890123456789012345678901234567890";
i = wcstombs (pmbbuf, pwchello, wcslen(pwchello)* MB_CUR_MAX + 1);
printf("%d\n", MB_CUR_MAX);
printf (" Characters converted: %u\n", i);
printf (" Multibyte character: %s\n\n", pmbbuf);
return 0;
}
But when I run ./a.out it printed:
1
Characters converted: 40
Multibyte character: 1234(Segmentation fault
Any ideas about what causes the segmentation fault?
You’re trying to put a string that’s definitely longer than 4 chars into a char array that can hold 4 characters. As you don’t specify ‘4’ as the maximum size, the conversion will write into memory that it doesn’t own or that might be used by other variables, house keeping data like function return values on the stack or similar. This will lead to the seg fault as you’re overwriting data that was pushed on the stack (stacks grow top-down) before you called
wcstombs.