当我运行以下代码时,我收到错误
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));
}
答案 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;
}
哪个是合法的。