Что делает эта строка кода? [Новичок]
int main(void)
{
string n = GetString();
if(n!=NULL){
for(int i=0, j=strlen(n); i<j; i++){
if(!isalpha(n[i-1]) && isalpha(n[i])){
printf("%c", toupper(n[i]));
}
}
}
}
if(!isalpha(имя [i-1]) && isalpha(имя [i]))
как объяснить эту строку новому стартеру?(кстати, код работает правильно на гарвардском cs50 ide)
1 ответ
Код пытается найти каждое вхождение не алфавитного символа в массиве n
сопровождаемый буквенным символом и, в каждом из них, печатать этот буквенный символ в верхнем регистре.
Проблема в том, что, так как i
начинается со значения 0
код имеет неопределенное поведение на первой итерации, так как он обращается к символу до начала массива.
Может показаться, что код правильно работает под CS50, но это просто случайность. Одной из особенностей неопределенного поведения является то, что не требуется создавать какие-либо ошибки или неожиданные результаты. Но это не делает это правильно. Это просто означает, что он не вызывал наблюдаемого симптома при некоторых обстоятельствах.
Примечание: ради обсуждения, я предполагаю string
это указатель на char
и что GetString()
возвращает адрес первого символа в массиве char
,