есть ли проблема иметь этот char
('\0'
) дважды в конце строки?
В этом вопросе нет ясности, так как "строка" означает разные вещи для людей.
Давайте воспользуемся определением спецификации C, так как это сообщение C.
строка – это непрерывная последовательность символов, заканчивающаяся первым нулевым символом и включающая его. C11 §7.1.1 1
Таким образом, строка не может содержать 2 нулевых символа, так как строка заканчивается при достижении первого символа. @Майкл Уолц
Вместо этого повторите анализ на «есть ли проблема с добавлением потенциального второго нулевого символа в массив символов - для решения проблем со строками?»
Проблема с попыткой добавить нулевой символ в строку — путаница. Функции str...()
работают со строками C, как определено выше.
// If str1 was not a string, strcpy(str1, anything) would be undefined behavior.
strcpy(str1, "\0"); // no change to str1
char str2[] = "abc";
str2[strlen(str2)] = '\0'; // OK but only, re-assigns the \0 to a \0
// attempt to add another \0
str2[strlen(str2)+1] = '\0'; // Bad: assigning outside `str2[]` as the array is too small
char str3[10] = "abc";
str3[strlen(str3)+1] = '\0'; // OK, in this case
puts(str3); // Adding that \0 served no purpose
Как многие отмечают, добавление запасного '\0'
напрямую не связано с фундаментальной проблемой кода. @Haris @Малкольм Маклин
Этот неопубликованный код является реальной проблемой, требующей решения @Yunnosch, и не пытаясь добавить второй '\0'
.
person
chux - Reinstate Monica
schedule
09.06.2017
'\0'
не является проблемой, если только вы не вышли за пределы этого массива символов. Вы должны понимать, что наличие'\0'
дважды означает, что любая строковая операция даже не будет знать, что есть второй'\0'
. Они будут просто читать до первого'\0'
и быть с ним. - person Haris   schedule 09.06.2017'\0'
(или NUL) завершает строку. Таким образом, по определению все, что идет после этого символа NUL, не является частью строки, несмотря ни на что. - person Jabberwocky   schedule 09.06.2017\0
в конце или нет? Это невозможно сделать. - person Spikatrix   schedule 09.06.2017'\0'
(кстати, как вам узнать, где заканчивается строка без'\0'
?), на самом деле у вас может быть xy-проблема - person   schedule 09.06.2017'\0'
. - person chux - Reinstate Monica   schedule 09.06.2017\0
. Насколько я понимаю, у вас есть случай, который вылетает для одного\0
и не вылетает для\0\0
. т.е. пожалуйста, продемонстрируйте, что он падает из-за одного\0
вместо двух, а не из-за отсутствия двух вместо двух. - person Yunnosch   schedule 09.06.2017