C мощью функции char *strrchar (const *src, char ch) находит последнее вхождение символа ch в строку src.Происходит ошибка компиляции
Мне нужно с помощью функции char *strrchar (const *src, char ch) найти последнее вхождение символа ch в строку src.Функция должна возвращать указатель на результат. Написал функцию,которая вроде должна работать, но при попытке запуска выдает ошибку:cast to pointer from integer of different size. Как можно исправить эту ошибку чтобы программа заработала? вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strrchar(const char *src, char ch){
int m=1,i, res = -1;
while(src[m-1] != 0){
m++;
}
if(*src=='\0') return NULL;
else for(i=m;i>-1;i--){
if(*(src+i)==ch) res=res+i+1;
if(*(src+i)==ch) break;
}
if (res=='\0') return NULL;
else return (char*)res;//вот на этой строчке происходит ошибка
}
int main(void){
const char *s="testtest";
printf("%s",strrchar(s,'s'));
return 0;
}
Ответы (1 шт):
Если в целочисленной переменной res вы пытаетесь запомнить индекс в массиве src по которому расположен искомый символ (в чём я не уверен до конца...), то возвращать нужно src + res.
Если указатель src имеет тип const char*, а возвращаемый функцией тип есть char*, то дополнительно потребуется снять константность: (char*)(src + res).
Но в целом, вашу функцию я бы переписал так:
#include <stdio.h>
#include <stddef.h>
const char *strrchar(const char *src, char ch) {
if (!src) return NULL;
const char* res = NULL;
for (;; ++src) {
if (*src == ch)
res = src;
if (*src == '\0')
break;
}
return res;
}
int main(void) {
const char *s = "testtest";
printf("%s\n", strrchar(s,'s'));
return 0;
}
st
P.S. Спецификатор преобразования "%s" требует, чтобы в функцию printf был передан ненулевой указатель, иначе поведение не определено. Т.к. функция strrchar может вернуть нулевой указатель, то нужно проявлять осторожность, передавая в printf непосредственный результат вызова strrchar.