Сомнение в значении счета передано в strncat - PullRequest
0 голосов
/ 31 января 2010

Предположим, у меня есть массив размером 10 символов (memset to 0), который я передаю strncat в качестве места назначения, а в исходном коде я передаю строку, скажем, длиной 20 символов (завершается нулем), теперь я должен передать «считать» как 10 или 9?

Сомнение в том, считает ли strncpy 'count' как размер буфера назначения, или он просто копирует 10 символов в место назначения и затем добавляет завершающий символ NULL в 11-ю позицию.

Извините, если вопрос кажется слишком тривиальным, но я не смог разобраться в справочной документации strncpy.

Ответы [ 5 ]

3 голосов
/ 31 января 2010

Вероятно, вам следует просто прочитать страницу руководства немного больше. Похоже, что это рабочее предложение:

Функция strncat () похожа, за исключением того, что он будет использовать не более n персонажи из SRC. Так как результат всегда заканчивается '\ 0', в записано большинство n + 1 символов.

2 голосов
/ 31 января 2010

Если в вашем массиве есть место только для 10 символов, тогда ваш счет должен быть 9, поскольку strncat попытается добавить count символов из src плюс нулевой терминатор.

Кроме того, в этом случае ваш destination должен иметь нулевой терминатор в первой позиции, потому что это то место, с которого вам нужно начать добавление.

2 голосов
/ 31 января 2010

strncat применит нулевой терминал для вас. Поскольку он не знает о предполагаемой строке, на которую вы указываете, он будет предполагать, что есть место для нулевого терминала. Итак, вы хотите перейти в 9.

1 голос
/ 31 января 2010

Простой ответ: убедитесь, что ваш буфер достаточно большой, если ваш буфер должен содержать 10 символов, добавьте один к размеру буфера, чтобы вместить нулевой символ \0. Это не может быть подчеркнуто достаточно и является одним из самых больших камней преткновения в обучении C.

Если вы не указали подходящую длину, исключая символ nul, произойдет переполнение буфера и непредсказуемые результаты, такие как сбой программы или перепрыгивание в лес, которое больше никогда не будет видно.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

1 голос
/ 31 января 2010

$ man strncat

If src contains n or more characters, strncat() writes  n+1  characters
to  dest  (n  from src plus the terminating null byte).  Therefore, the
size of dest must be at least strlen(dest)+n+1
$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...