#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子句时它没有响应。
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
char *pc[20];
这意味着pc
是一个大小为20的数组,可以容纳20个指向char
的指针。在你的程序中,你只需要在变量pc
中存储一个字符串或文本(无论如何),那么为什么它被声明为包含20个字符串(20 pointer to char
)。
您程序中的pc
数组现在也未设置NULL
。所以pc
指向大约20个垃圾值。这是完全错误的。 cin
将尝试将stdin
中的日期写入pc
数组的第一个索引中的某个垃圾指针。
因此,程序中的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;
第三种方式
char pc[MAX_TEXT_SIZE];
cout<<"Type the text" << endl;
cin>>pc;
注意:请注意NULL
检查malloc的返回