Попробуйте это:
int SumStr(char *str)
{
int temp = 0;
while(*str)
{
if((*str >= '0') && (*str <= '9'))
temp += *str - '0';
str++;
}
printf("%d", temp);
return 0;
}
Хотя это может показаться более нормальным:
int SumStr(char *str)
{
int result = 0;
while(*str)
{
if((*str >= '0') && (*str <= '9'))
temp += *str - '0';
str++;
}
return result;
}
Вызов функции с помощью SumStr("t5ds5")
дает ожидаемый результат 10.
Ваш код не продвигался str
, поэтому вы проверяли один и тот же символ каждый раз в цикле. Он также вызывает strlen()
каждый раз вокруг цикла, что делает алгоритм O (n ^ 2) не идеальным. Вы также можете пройтись по строке один раз в соответствии с кодом выше.
Относительно того, почему ваш код вызвал нарушение прав доступа, которое должно быть из-за частей кода, которые вы не показали. Можно только представить, что str
должен указывать на недопустимый адрес памяти или не имеет нулевого конца.