Это распространенная ошибка между самим массивом символов и указателем, где начинается этот массив.
Например, строковый литерал в стиле C:
char hello[14] = "Hello, World!";
- 14 байтов (13 для сообщения и 1 для нулевого завершающего символа).
Вы можете использовать sizeof()
, чтобы определить размер необработанной строки в стиле C.
Однако, если мы создадим указатель на эту строку:
char* strptr = hello;
И попытайтесь определить его размер с помощью sizeof()
, он всегда будет возвращать только размер указателя данных в вашей системе.
Итак, другими словами, когда вы пытаетесь получить размер строки из библиотеки строк, вы действительно получаете только размер указателя на начало этой строки. Вам нужно использовать функцию strlen()
, которая возвращает размер строки в символах:
sizeof(strptr); //usually 4 or 8 bytes
strlen(strptr); //going to be 14 bytes
Надеюсь, это прояснит ситуацию!