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 子句时,它没有响应。

4

3 回答 3

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;
}
于 2012-05-31T14:37:18.353 回答
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 的返回

于 2012-06-22T05:18:28.443 回答
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;
}
于 2012-05-31T14:09:35.403 回答