新手学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函数
[解决办法]
[解决办法]
我觉得有这些错误:
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]。
[解决办法]
[解决办法]
int strcmp( const char *string1, const char *string2 );
[解决办法]
第一个出错改为: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;}
[解决办法]