我刚刚开始学习C并且我收到指针的各种错误。我无法真正找到下面的代码有什么问题。我浪费了一天来解决这个问题但仍然没有。它说一元的无效类型参数。我怀疑原因是双指针。我尝试了几种解决方法。在进行比较和类似的事情之前,我试图为双指针放置括号。但没有任何帮助。 这里真的有什么不对?我将非常感谢你的帮助。
#include <stdio.h>
#include <string.h>
int isEqual(char *line, char *word){
while(**line == **word && **line && **word){
(*line)++;
(*word)++;
}
if(**line == **word == '\0') return 1;
else return 0;
}
int main(){
int i;
int argc = 2;
char **lines;
*lines = "sort";
(*lines)++;
*lines = "revs";
if(isEqual(*lines, "sort")){
printf("Equal");
}else{
printf("Not equal");
}
}
return 0;
}
答案 0 :(得分:3)
变量lines
未初始化
char **lines;
所以下一个陈述已经无效
*lines = "sort";
同样在函数中这句话
while(**line == **word && **line && **word){
也无效,因为您可能不会两次将解除引用应用于定义为char *
的对象
函数IsEqual完全无效并使用无效的C结构。
有效程序可以采用以下方式
#include <stdio.h>
int isEqual( const char *line, const char *word )
{
while( *line == *word && *line )
{
line++;
word++;
}
return *line == *word;
}
int main( void )
{
char * lines[2];
lines[0] = "sort";
lines[1] = "revs";
if ( isEqual( lines[0], "sort" ) )
{
puts( "Equal" );
}
else
{
puts( "Not equal" );
}
if ( isEqual( lines[1], "sort" ) )
{
puts( "Equal" );
}
else
{
puts( "Not equal" );
}
return 0;
}
或者代替这三个陈述
char * lines[2];
lines[0] = "sort";
lines[1] = "revs";
你只能写一个陈述
char * lines[2] = { "sort", "revs" };
输出
Equal
Not equal
答案 1 :(得分:1)
首先,您需要向我们展示实际的错误消息,我认为它类似于
error: invalid type argument of unary ‘*’ (have ‘int’)
*
非常重要,因为这是他们抱怨的运营商。请更新您的问题以显示完全(复制并粘贴)错误消息,并清楚地指出您所引用的程序的哪一行。
您已将line
定义为char*
类型的对象,因此*line
的类型为char
,而**line
是非法的(因为{ {1}}不是指针。)
将char
更改为**line
至少应该避免该错误。我没有花时间弄清楚这是否是你需要做的唯一改变。
(顺便说一句,请避免使用短语“双指针”,它可以引用类型*line
。改为使用“指向指针”。但是你没有指向double*
函数中指针的指针。)
答案 2 :(得分:0)
一开始
int isEqual(char *line, char *word){
while(**line == **word && **line && **word){
当您按line
声明char* line
时,您说line
是指向char
类型变量的指针,这意味着line
的值是char
类型变量的地址。
当您使用指针时,*line
表示char
指向的line
类型变量的值。因此,当您使用**line
时,它没有任何意义,因为您尝试从值*line
的地址获取值。
例如,如果您的line
指向char
类型变量且值为&#39; a&#39;,则**line
是保存在地址{{1}的值}}。 (因为&#39; a&#39;的ascii值是0x61,而C将0x61
视为char
)