首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

新手学C用指针有异常,

2012-04-05 
新手学C用指针有错误,求助啊以下代码想实现的是:先输入一串单词,再输入一个单词查查有没有。主要是想用指针

新手学C用指针有错误,求助啊
以下代码想实现的是:先输入一串单词,再输入一个单词查查有没有。
主要是想用指针的方法,但是一下代码出现了两个错误。
新手刚学,拍砖的轻点哦,谢谢指导。

C/C++ code
#include<stdio.h>#include<string.h>#define M 30void input(char *p[]){    int i=0;    printf("输入一串单词:");    while((scanf("%s",p[i]))!='\0')    {        i++;    };    p[i+1]=NULL;}int handle(char *p[]){    int i=0;    char *p1=NULL;    printf("\n需要查找的单词:");    scanf("%s",p1);    while(strcmp(*p[i],*p1)!=0) //错了    {        i++;        if(p[i]==NULL)           return -1;    }    return i;}void output(char *p[],int m){    if(m==-1) printf("没有需要查找的字符!\n");    else printf("需要查找的单词出现在第%d个\n");}void main(){    int m;    char *p[M]=NULL;//错了    input(p);    m=handle(p);    output(p,m);}

错误提示是:D:\安装程序\VC6CN\MSDev98\Bin\qw.cpp(23) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'
  Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
D:\安装程序\VC6CN\MSDev98\Bin\qw.cpp(23) : fatal error C1903: unable to recover from previous error(s); stopping compilation
执行 cl.exe 时出错.

[解决办法]
strcmp(*p[i],*p1) ==> strcmp(p[i],*p1), *p[i] 是字符串 p[i] 的第一个字符

int M = 256;
char *p[M];
memset(p, 0, M);
[解决办法]
const unsigned int M = 256;
char *p[M];
memset(p, 0, M);
[解决办法]
这种问题设个断点一调试不久行了吗
[解决办法]
char *p[M]={NULL};也许数组应该这样赋值,或许,大概

[解决办法]
首先指针没有分配内存呀 用malloc函数
[解决办法]
探讨

strcmp(*p[i],*p1) ==> strcmp(p[i],*p1), *p[i] 是字符串 p[i] 的第一个字符

int M = 256;
char *p[M];
memset(p, 0, M);

[解决办法]
我觉得有这些错误:
1.strcmp中,p[i],和p1都是指向字符串第一个元素地址的指针,而*p[i]和*p1自然就是字符串的首元素。是char类型,因此不能用strcmp比较。 应直接带地址比较str(p[i],p1)
2.字符数组的赋值应该用char *p[M] = {NULL};
改了这些应该就可以运行了 可是运行会报错 为什么呢?
因为你输入的字符串并没有内存存放,只有指针。也就是说
int main()
{
char *p ;
scanf("%s",p);
return 0;
}
这是会在运行时报错的。应该为每个单词建立一个字符数组或字符串。再建立char**p[M]。
[解决办法]
探讨
我觉得有这些错误:
1.strcmp中,p[i],和p1都是指向字符串第一个元素地址的指针,而*p[i]和*p1自然就是字符串的首元素。是char类型,因此不能用strcmp比较。 应直接带地址比较str(p[i],p1)
2.字符数组的赋值应该用char *p[M] = {NULL};
改了这些应该就可以运行了 可是运行会报错 为什么呢?
因为你输入的字符串并没有内存存放,只有指针。也就……

[解决办法]
int strcmp( const char *string1, const char *string2 );

[解决办法]
第一个出错改为:while(strcmp(*p[i],p1)!=0) 
第二个出错改为:char *p[M]={NULL};
[解决办法]
探讨
第一个出错改为:while(strcmp(*p[i],p1)!=0) 
第二个出错改为:char *p[M]={NULL};

[解决办法]
一个严重问题是,我没看到内存分配。
------解决方案--------------------


1.字符串比较函数strcmp的参数是两个char*类型,所以需改为while(strcmp(p[i],p1)!=0);
2.char *p[M 是一个字符指针数组,所在初始化就得写成 char *p[M]={NULL};将char* 数组全部初始化为NULL
3.printf("需要查找的单词出现在第%d个\n"); 你是忘了写m了吧!

4.最严重的问题,你输入的单词没有空间可存,你没有为char* 分配空间!

以上错误大家都已经提到了,我就算大概总结一下吧
[解决办法]
while(strcmp(*p[i],*p1)!=0) //错了
{
i++;
if(p[i]==NULL)
return -1;
}
拷贝函数时用的是指针,不是值,你这*p1是表示p1指针指的值了
[解决办法]

C/C++ code
#include<stdio.h>#include<string.h>#define M 30#define WordLength 20void input(char p[][WordLength]){    int i=0;    printf("ÊäÈëÒ»´®µ¥´Ê:");    while(((scanf("%s",p[i]))!=0)&& p[i][0]!='\n')    {        i++;    };    p[i][0]='\0';}int handle(char p[][WordLength]){    int i=0;    char p1[WordLength];    printf("\nÐèÒª²éÕҵĵ¥´Ê:");    scanf("%s",p1);        while(strcmp(p[i],p1)!=0) //´íÁË    {        i++;        if(p[i][0]=='\0')            return -1;    }    return i;}void output(char p[][WordLength],int m){    if(m==-1) printf("ûÓÐÐèÒª²éÕÒµÄ×Ö·û!\n");    else printf("ÐèÒª²éÕҵĵ¥´Ê³öÏÖÔÚµÚ%d¸ö\n",m);}int main(){    int m;    char p[M][WordLength];//´íÁË    input(p);    m=handle(p);    output(p,m);    return 0;}
[解决办法]
探讨

C/C++ code
#include<stdio.h>
#include<string.h>
#define M 30
#define WordLength 20
void input(char p[][WordLength])
{
int i=0;
printf("ÊäÈëÒ»´®µ¥´Ê:");
while(((scanf("%s",p[i]))!=0)&amp;……

热点排行