2012-05-31 2 views
0
#include <iostream> 
using namespace std; 
int syn(char *pc[], char, int); 
int main() 
{ 
    char *pc[20]; 
    char ch; 
    cout<<"Type the text" << endl; 
    cin>>*pc; 
    cout<<"Type The character:" << endl; 
    cin>>ch; 
    int apotelesma = syn(&pc[0], ch, 20); 
    cout<< "There are " << apotelesma << " " << ch << endl; 

system("pause"); 
return 0; 
} 
int syn(char *pc[],char ch, int n){ 
    int i; 
    int metroitis=0; 
    for (i=0; i<n; i++){ 
     if (*pc[i]==ch){ 
      metroitis++; 
     } 
    } 
    return metroitis; 
} 

아무도 저에게 뭐가 잘못 됐는지 말해 줄 수 있습니까? if 절의 내부에있을 때 응답하지 않습니다.문자 배열과 포인터

+1

문자에 대한 포인터 배열을 원하십니까? 마치 문자 배열처럼 사용하는 것처럼 보입니다. – chris

+0

char 배열이 필요하다고 생각합니다. char pc [20] –

+0

네, 맞습니다. 내 실수 중 하나입니다. 내 배열 [20]을 function.the 함수 syn에서, 나는 배열에 대한 검색을하고 싶다. 지금 syn을 바꿨다. int syn (char * pc, char ch, int n)하지만 if 루프에 오류가있다. 부당한 단항 형 인수 * –

답변

0

일부 코드를 수정하십시오. 이

#include <iostream> 
using namespace std; 
int syn(char pc[], char, int); 
int main() 
{ 
    char pc[20]; 
    char ch; 
    cout<<"Type the text" << endl; 
    cin>>pc; 
    cout<<"Type The character:" << endl; 
    cin>>ch; 
    int apotelesma = syn(pc, ch, 20); 
    cout<< "There are " << apotelesma << " " << ch << endl; 

system("pause"); 
return 0; 
} 
int syn(char pc[],char ch, int n){ 
    int i; 
    int metroitis=0; 
    for (i=0; i<n; i++){ 
     if (pc[i]==ch){ 
      metroitis++; 
     } 
    } 
    return metroitis; 
} 
+0

nope.i가 포인터를 가지고 싶습니다. –

1

당신의 'PC'시도 변수는 문자로 20 포인터의 배열 (20 문자열의 본질적 배열)입니다. 당신은 포인터를 사용해야하는 경우

, 시도 :

#include <iostream> 
using namespace std; 
int syn(char *pc, char, int); 
int main() 
{ 
    char *pc = new char[20]; 
    char ch; 
    cout<<"Type the text" << endl; 
    cin>>pc; 
    cout<<"Type The character:" << endl; 
    cin>>ch; 
    int apotelesma = syn(pc, ch, strlen(pc)); 
    cout<< "There are " << apotelesma << " " << ch << endl; 

system("pause"); 
return 0; 
} 
int syn(char *pc,char ch, int n){ 
    int i; 
    int metroitis=0; 
    for (i=0; i<n; i++){ 
     if (pc[i]==ch){ 
      metroitis++; 
     } 
    } 
    return metroitis; 
} 
+0

'[pc [를 (를) 삭제하는 것을 잊었습니다. –

+0

나는 그랬다. 내 방어에서, 나는 숯으로 그것을하지 않았을거야 –

+0

내가 놓친 게 있니? 당신은'char * pc = new char [20];을 선언하지만 그것을 풀지는 마라. –

0

char *pc[20];pcchar 20 포인터를 저장할 수있는 크기 (20)의 배열을 의미합니다. 귀하의 프로그램에서는 하나의 문자열이나 텍스트 (무엇이든)를 해당 변수 pc에 저장해야하므로 20 개의 문자열 (20 pointer to char)을 보유한다고 선언 된 이유는 무엇입니까?

이제 pc 배열은 NULL도 아닙니다. 따라서 pc은 20 개의 쓰레기 값을 가리 킵니다. 그게 완전히 틀렸어. cinpc 배열의 첫 번째 인덱스에있는 어떤 정크 포인터에 stdin의 날짜를 쓰려고 시도합니다.

그래서 cin>>*pc; 프로그램에서 충돌이나 다른 메모리 손상이 발생합니다.

첫번째 방법 방법

char *pc[20] = {0}; 
for (i = 0; i < 20; i++) 
{ 
     pc[i] = new char[MAX_TEXT_SIZE]; 
} 
cout<<"Type the text" << endl; 
cin>>pc[0]; 

두번째 방법

char *pc = new char[MAX_TEXT_SIZE]; 
cout<<"Type the text" << endl; 
cin>>pc; 

3 방법 중 어느 하나의 프로그램을 변경

char pc[MAX_TEXT_SIZE]; 
cout<<"Type the text" << endl; 
cin>>pc; 

참고 :,532의주의3210 malloc 반환 확인

관련 문제