Я должен ответить на вопрос домашнего задания для одного из моих классов. В частности, я должен сказать, считаются ли определенные массивы в C строками или нет. На основе этой статьи (https://www.geeksforgeeks.org/strings-in-c-2/) Я знаю, что строки представляют собой массив символов с завершающим нулем в конце.
Мое основное зависание — это часть вопроса, который спрашивает о массиве, который выглядит так:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
Очевидно, это массив символов с завершающим нулем в конце. Однако считается ли она по-прежнему строкой, поскольку она также имеет нулевой завершающий символ в середине? Как это повлияет на строку?
РЕДАКТИРОВАТЬ: на основе комментариев я предоставил фактическую формулировку вопроса:
«Какие из следующих массивов можно считать «строками» в целях использования их в качестве аргументов для функций strcpy(), strncpy(), strcmp(), strncmp() и подобных строковых функций (указать все применимые)?»
РЕДАКТИРОВАТЬ: я написал об этом своему профессору по электронной почте, так как вопрос казался неоднозначно сформулированным (как указали несколько человек). Если кому-то интересно, он сказал мне: «Да, это строка. Суть в том, что есть нулевой символ. Но, конечно, это повлияет на любые операции со строками; строка заканчивается нулевым символом».
"CS"
с добавлением нескольких байтов мусора (в этом случае последний символ NUL не имеет значения). Но это не строка в целом. -- Тем не менее, передача этого наstrcpy
и т. д. не взорвет ваш компьютер, потому что эти функции будут видеть только часть"CS"
. - person Hagen von Eitzen   schedule 22.02.2020strcmp()
. Можно ли использовать его в качестве аргумента для изменяемых строковых функций, зависит от дополнительных факторов, которые не указаны. - person EOF   schedule 22.02.2020str[n]cpy()
. - person Andrew Henle   schedule 22.02.2020c1
является изменяемым, поэтому я не понимаю, почему он не может быть допустимым аргументом назначения дляstrcpy
или подобного, если только он не был достаточно большим для размещения исходной строки. Это не сделало бы ее не строкой, а просто не подходящей для данной цели. - person John Bollinger   schedule 22.02.2020c1
удовлетворило бы основным требованиям к строковым аргументам для всех строковых функций стандартной библиотеки (узких), включая все специально названные, но поведение может не соответствовать ожидаемому или желаемому вызывающей стороне (даже игнорируя неопределенное поведение, которое может быть вызвано) . - person John Bollinger   schedule 22.02.2020char
. Подойдет любой тип символа. - person chux - Reinstate Monica   schedule 22.02.2020c1
— это массив, содержащий строку CS. Конец истории. Он также содержит некоторые оставшиеся мусорные байты после конца, как и многие строки. - person Lee Daniel Crocker   schedule 22.02.2020