Да де, това исках да ти кажа, тъпчеш в една променлива, за която си заделил 2 байта - 6-7 някъде. Съответно тези променливи се пазят в стека, на края на който се пази адреса на който програмата трябва да продължи, излизайки от функцията. Като помажеш този адрес с "asdf", програмата продължава от някакъв адрес на майната си и най-вероятно гърми със segfault
'>
Иначе що се отнася до "дължина" на стринга - много е просто. Стринговете се терминират с \0. "Позицията" на тази нула, спрямо "началото" на стринга (т.е адреса на char *bla) се води "дължина" на стринга. Така теоретично стринга може да бъде много голям. Всъщност това понякога води до доста проблеми, но като идея си е много по-добре от паскал-ския подход например, където стринговете са масиви и нулевият елемент на масива "държи" дължината на стринга
'>