如何解决关于不兼容指针类型的警告 - c
int main() {
char* input[81];
char** array[81];
userInput(input);
parseInput(input);
}
userInput 接受输入并存储在输入变量中。这工作正常。
但现在我想将输入和字符指针数组都发送到我的 parseInput 函数,以使用 strtok 将输入解析为数组
void parseInput(char* in) {
char *tok = strtok(in," ");
int i = 0;
while(tok != NULL) {
array[i] = tok;
tok = strtok(NULL," ");
i++;
}
}
当我尝试编译时收到以下警告,但我不明白为什么。
警告:从不兼容的指针类型传递“userInput”的参数 1 [默认启用] 用户输入(输入);
警告:从不兼容的指针类型传递“parseInput”的参数 1 [默认启用] 解析输入(输入,数组);
任何指导将不胜感激。谢谢
解决方法
您将函数 parseInput
定义为接受类型为 char*
的参数,但在函数 main
中,您向其传递类型为 {{1} 的 decayed 参数}}。这就是您的编译器抱怨指针类型不兼容的原因。
代替
char**
你可能应该写:
char* input[81];
还有声明
char input[81];
可能应该改为:
char** array[81];
另外,正如评论部分已经指出的,函数 char* array[81];
不会编译,因为它引用了一个标识符 parseInput
,但没有具有该名称的标识符对该函数可见。它看不到函数 array
的标识符 array
。因此,如果您希望函数main
可以访问函数parseInput
中的array
,那么在调用main
时,您必须传递一个指向该数组的指针。
您的代码的另一个问题是函数 parseInput
的行为没有意义,因为该函数的调用者(在本例中为 parseInput
)无法知道有多少个元素指针数组的内容由 main
写入。因此,它无法知道函数调用后数组中有多少元素是有效的。出于这个原因,让函数 parseInput
返回一个 parseInput
可能更有意义,它指定写入的数组元素的数量。
另一个问题是函数 int
只是假设传递的数组足够大。如果该假设为假,则将导致 buffer overflow。因此,将函数 parseInput
设计为这样一种方式可能会更安全,即还传递一个指定所传递数组大小的参数,以便函数可以在缓冲区溢出发生之前停止。>
应用上述所有修改后,函数 parseInput
将如下所示:
parseInput
而不是像这样调用函数
int parseInput( char* in,char** results,int results_length )
{
char *tok = strtok(in," ");
int i = 0;
while( tok != NULL && i < results_length )
{
results[i] = tok;
tok = strtok(NULL," ");
i++;
}
return i;
}
你现在可以这样称呼它:
parseInput(input);
此测试程序提供以下输出:
int main(void)
{
char input[81] = "This is a test.";
char* array[81];
int num_elements;
num_elements = parseInput( input,array,sizeof array / sizeof *array );
for ( int i = 0; i < num_elements; i++ )
{
printf( "%s\n",array[i] );
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。