文字列strの中から文字cを探すプログラム(C言語)がわからない
文字列strの中から文字cを探すプログラム(C言語)がわからない
柴田望洋さんの「[新版]明解C言語」という本の演習11-2なんですがどうしてもわかりません。間違いは無いと思うのにコンパイルすると警告を吐かれます。
僕が書いたプログラムを載せます。
/*
文字列strの中に、文字cが含まれていれば(複数ある場合は、最も先頭側とする)、
その文字へのポインタを返し、含まれていなければNULLを返す関数
char *str_chr(const char *str, int c) {}
を作成せよ。
*/
#include<stdio.h>
char *str_chr(const char *str, int c){
while(*str){
if(*str==c) return str;
str++;
}
return NULL;
}
int main(){
char *str;
char c;
scanf("%s",str);
scanf(" %c",c);
printf("%d",str_chr(str,c));
return 0;
}
コンパイラは「関数str_chrのif分の中のreturn strの型変換に問題がある」と言っているんです。
型変換はしるつもりは無いのにコンパイラはなぜそのように認識するのでしょうか。
またネット答えを探しましたがどうやらこのreturn strの部分はreturn (char*)strが正解のようです。意味がわかりません。strはポインタなのになぜまたわざわざchar型に変換しているのですか?といか(char*)の意味が根本的にわかりません。
質問ばかりですみません。初心者でポインタがどうにも理解できないんです。
誰か詳しい人教えてください。
お願いします。
お礼
ありがとうございます。 extern char *memcpy(char *, const char *); といような書式は初めて見ました。