冲突类型错误

时间:2015-11-06 17:37:12

标签: c types

当我运行以下代码时,我收到错误

 problem1.c:136:6: error: conflicting types for 'strcspn' 
   int strcspn( char * str, char * reject ) 

我不确定为什么我会收到冲突类型错误。 这是代码:

int strcspn( char * str, char * reject ) 
{

    int counter = 0;

    for (int i = 0; i < strlen(str); i ++)
    {       for (int j = 0; j < strlen(reject); j++)
                if ( *(str + i) == *(reject + j) )
                return counter;
        counter++;
    }

return counter;

}


void main ()
{


char * str1 = (char *)malloc(sizeof(char)*100);
char * str2 = (char *)malloc(sizeof(char)*100);
sprintf(str1, "abc123");
sprintf(str2, "d2");
printf("%d\n", strcspn(str1, str2)); 

}

2 个答案:

答案 0 :(得分:4)

strcspn<strings.h>中声明。看起来你以某种方式包含了该标题,然后尝试以不同于头文件定义的方式重新定义strcspn。在我的<strings.h>中,它被定义为

 size_t strcspn(const char *s, const char *reject);

答案 1 :(得分:1)

正如lowtech在他的回答中已经说过的那样,你应该避免重新定义已经采用的C程序中的函数名称。

您的程序有任何问题,您应该知道。

  

1)strlen的返回类型是 size_t 而不是int。
  2)主要   应该至少 int main(void){}
  3)没有必要施放   malloc,其返回类型为void *
  4)最重要的一个,你   应该永远释放你的malloc。

看看这里:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int strcspn_ss( char * str, char * reject ){
    int counter = 0;
    size_t i,j;

    for (i = 0; i < strlen(str); i ++){
        for (j = 0; j < strlen(reject); j++)
                if ( *(str + i) == *(reject + j) )
                return counter;
        counter++;
    }

    return counter;
}


int main (void){

    char * str1 = malloc(sizeof(char)*100);
    char * str2 = malloc(sizeof(char)*100);
    sprintf(str1, "abc123");
    sprintf(str2, "d2");
    printf("%d\n", strcspn_ss(str1, str2));

    free(str1);
    free(str2);
    return 0;
}

编辑: 就像cad在他的评论中所说,有一个重要的事情你应该知道,如果你在一个函数内声明一个变量或者用作参数并不影响strcspn函数,请参阅以下内容:

#include<stdio.h>

void foo(int strcspn){
    printf("strcspn = %d\n",strcspn);
}


int main (void){
    int strcspn = 10;
    foo(strcspn);
    return 0;
}

哪个是合法的。