0

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

3 回答 3

1

您的代码有两个问题:

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

  2. 您正在返回 -1而不是在其形式中不是有效指针的指针。如果发生故障,我建议您返回NULL

  3. -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
}
于 2013-06-09T13:02:53.233 回答
0

当你声明一个函数时,每个参数都需要一个类型和一个名称。您的removeSpaces函数需要一个 type 参数char *,因此您将其声明为

char * removeSpaces(char * str)

请记住,该函数不知道您将传递给它的数组的第一个元素。它只知道你会给它一个指向字符串的指针。

当数据丢失或无效时返回空指针也是 C 中的约定。因此,如果出现错误,则不应返回 -1,而应返回NULL.

于 2013-06-09T13:02:29.957 回答
0

声明:

char * removeSpaces(char *); 

与定义不同:

char * removeSpaces(char * str[0]);

更改原型:

char * removeSpaces(char *); 
于 2013-06-09T13:03:28.203 回答