Я должен ответить на домашнее задание для одного из моих занятий. В частности, я должен сказать, считаются ли определенные массивы в C строками или нет. Основываясь на этой статье ( https://www.geeksforgeeks.org/strings-in-c-2/ ), я знаю, что строки - это массив символов с нулевым терминатором в конце.
Мое основное зависание является частью вопроса, который задает вопрос о массиве, который выглядит следующим образом:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
Это, очевидно, массив символов с нулевым завершающим символом в конце. Однако считается ли он строкой, поскольку в середине также есть нулевой завершающий символ? Как это повлияет на строку?
РЕДАКТИРОВАТЬ: На основе комментариев, я представил фактическую формулировку вопроса:
«Какие из следующих массивов можно считать« строками »в целях использования их в качестве аргументов функций strcpy (), strncpy (), strcmp (), strncmp () и аналогичных строковых (указать все применимые)?»
РЕДАКТИРОВАТЬ: я написал своему профессору по электронной почте об этом, так как вопрос казался неоднозначным (как отметили несколько человек). Если кому-то любопытно, он сказал мне: «Да, это строка. Ключ в том, что есть нулевой символ. Но, конечно, это повлияет на любые строковые операции; строка заканчивается нулевым символом».
strcmp()
. Возможность его использования в качестве аргумента для мутирующих строковых функций зависит от дополнительных факторов, которые не указаны.
c1
является изменчивым, поэтому я не понимаю, почему он не может быть действительным целевым аргументом для strcpy
или подобным, если только он не был достаточно большим, чтобы вместить исходную строку. Это не сделало бы это не строкой, просто не подходящей для данной цели.
c1
будет удовлетворять основным требованиям для строковых аргументов для всех (узких) строковых функций стандартной библиотеки, включая все специально названные, но поведение может не соответствовать ожидаемому или желающему вызывающему (даже игнорируя неопределенные поведения, которые могут быть вызваны).
char
. Подойдет любой тип символов .
"CS"
с добавленными несколькими байтами мусора (в этом случае последний символ NUL не имеет значения). Но это не строка «в целом». - Тем не менее, передача этого иstrcpy
т. Д. Не заставит ваш компьютер взорваться, потому что эти функции будут «видеть» только"CS"
часть.