みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

次のプログラミングが上手くいきません

このプログラムを実行するとセグメンテーション違反が出てきて上手くできません…

#include<stdio.h>
#include<stdlib.h>

int search_letter( char *str, char letter);

int main(void){
int cnt;
char in[100];
char ch;
printf("Input a string: ");
gets(in);
printf("Input a letter: ");
scanf("%c", &ch); cnt = search_letter( in, ch);
printf("The number of letter '%c' is %d\n", ch, cnt );
return 0;
}

int search_letter( char *str, char letter)
{
char *p;
int n;
n=0;
p=str;
while(p != NULL){
if(letter == *p) n++;
p++;
}
return n;
}

実行結果が以下のようにならなければいけないのですが…

./pz1-2
Input a string: Mousukkari akidesune
Input a letter: o
The number of letter 'o' is 1

*"./pz1-2"と"Mousukkari akidesune"はキーボードから入力した文字です。

投稿日時 - 2009-11-13 14:28:05

QNo.5444606

すぐに回答ほしいです

質問者が選んだベストアンサー

"while(p != NULL)"は、"while(*p)"または、"while(*p != '\0')"。

 "NULL"と"\0"は、意味が違うのでちゃんと区別すること。
 

投稿日時 - 2009-11-13 15:26:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

while(p != NULL){
ここが
while(*p != NULL){
では?

このwhile文は文字列の終端を判断するもののはずです。

if(letter == *p) って記述しているように
文字は何ってことですね

投稿日時 - 2009-11-13 14:34:50

あなたにオススメの質問