В этом коде есть потенциальная проблема:
for (int j=0;j<s[i];++j) {
Значение s[i]
- это char
, что может быть типом со знаком.Если значение символа отрицательное, то этот цикл вызывает неопределенное поведение из-за возможного переполнения j
.
. В системе ASCII этот точный код не содержит отрицательных символов, но в EBCDIC символ новой строки равен 0x85
, чтопреобразовать в отрицательное символьное значение, если система имела простой символ как signed
.
Чтобы быть в безопасности, оно должно быть for (int j = 0; j < (unsigned char)s[i]; ++j)
.Или в версии, основанной на диапазоне, используйте for (unsigned char c: s)
.