我想写一个程序来验证字符串是否是回文。
但是当我尝试将strings[0]
传递给removeSpaces
函数时会出错,这会删除空格。
为什么会出现“comflicting types
错误”?有什么问题?
程序的整个代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * removeSpaces(char *); // prototype
int main()
{
char *strings[2]; // created array of pointers
strings[0] = strdup("a man a plan a canal panama");
printf("%s\n", strings[0]);
strings[1] = removeSpaces(strings[0]);
printf("%s\n", strings[0]);
/* (in future) it will display "amanaplanacanalpanama" */
free(strings[0]);
return 0;
}
char * removeSpaces(char * str[0]) // an ERROR occurs here
{
/* some code */
return -1; // in case of fault
}
答案 0 :(得分:1)
您的代码有两个问题:
您的函数声明和定义存在冲突。您不必指定
char *str[0]
,char *str
就足够了,它应与您在顶部的声明相匹配。
您正在返回-1
而不是指针,该指针在其表单中不是有效指针。如果发生某些故障,我建议您返回NULL
。
-1
是一个整数。但是,您也可以使用0
,因为默认为(void *)0
,只有NULL
。
改变如下:
char * removeSpaces(char * str) // an ERROR occurs here
{
/* some code */
return NULL; // return NULL in case of fault instead of -1
}
答案 1 :(得分:0)
声明函数时,每个参数都需要一个类型和一个名称。您的removeSpaces
函数采用char *
类型的单个参数,因此您将其声明为
char * removeSpaces(char * str)
请记住,该函数不知道你将它传递给数组的第一个元素;它只知道你会给它一个指向一串字符的指针。
C中的惯例是在数据丢失或无效时返回空指针。因此,如果出现错误,则不应返回-1,而应返回NULL
。
答案 2 :(得分:0)
宣言:
char * removeSpaces(char *);
与定义不同:
char * removeSpaces(char * str[0]);
更改原型:
char * removeSpaces(char *);