错误:'removeSpaces'的冲突类型

时间:2013-06-09 12:47:42

标签: c string strdup

我想写一个程序来验证字符串是否是回文。 但是当我尝试将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
}

3 个答案:

答案 0 :(得分:1)

您的代码有两个问题:

  1. 您的函数声明和定义存在冲突。您不必指定 char *str[0]char *str就足够了,它应与您在顶部的声明相匹配。

  2. 您正在返回-1而不是指针,该指针在其表单中不是有效指针。如果发生某些故障,我建议您返回NULL

  3. -1是一个整数。但是,您也可以使用0,因为默认为(void *)0,只有NULL

  4. 改变如下:

     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 *);