strlen
дает вам число ненулевых char
объектов в буфере, на которое указывает его аргумент, вплоть до первого нуля char
. Ваша система, очевидно, использует кодировку символов (скорее всего, UTF-8), где эти проблемные символы занимают более одного байта (то есть более одного char
объекта).
Как решить эту проблему, зависит от того, что вы пытаетесь сделать. Для определенных операций (таких как определение размера буфера, необходимого для хранения строки), результат из strlen
является 100% правильным, поскольку это именно то, что вам нужно. Для большинства других целей добро пожаловать в огромный мир символов / байтов / кодов / любых нюансов. Возможно, вы захотите прочитать текстовые кодировки, Unicode и т. Д. http://utf8everywhere.org/ может быть хорошим сайтом для начала.
Вы упомянули, что это университетское задание: исходя из цели обучения, вам может потребоваться реализовать некоторую форму кодирования / дешифрования UTF или просто держаться подальше от символов, не входящих в ASCII.