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