[英]Removing a character from a string in c language, getting conflicting types error
i am really new to coding and was working on a supposedly simple problem of removing a character from a string in the c language.我对编码真的很陌生,并且正在研究从 c 语言中的字符串中删除字符的一个简单的问题。 When I try to compile my code, I keep getting, error:conflicting types for 'remove'.当我尝试编译我的代码时,我不断收到错误:'remove' 的类型冲突。 I don't know why I am getting this error because the code seems okay.我不知道为什么我会收到这个错误,因为代码看起来没问题。 Help with this will be greatly appreciated.对此的帮助将不胜感激。 This is the code这是代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch,str[30],word[30];
void remove(char[],char[],char);
printf("enter the string\n");
gets(str);
printf("enter the character to move\n");
ch=getchar();
remove(str,word,ch);
printf("converted to %s\n",word);
}
void remove(char str[], char word[],char c){
int j=0,k=0;
while(str[j++]!='\0'){
if(str[j]!=c)word[k++]=str[j];}
word[k]='\0';
}
The header <stdio.h>
already has a declaration of a function named remove
.头文件<stdio.h>
已经有一个名为remove
的函数声明。
int remove(const char *filename);
So the compiler issues an error because the identifier remove
is declared two times with different types in the same file scope.因此编译器会发出错误,因为标识符remove
在同一文件范围内以不同类型声明了两次。
So rename your function as for example remove_copy
.因此,将您的函数重命名为例如remove_copy
。
Nevertheless the function implementation is wrong.然而函数实现是错误的。
Within the loop循环内
while(str[j++]!='\0'){
if(str[j]!=c)word[k++]=str[j];}
you are comparing a next element str[j]!=c
after current due to the increment in the condition由于条件的增加,您正在比较当前后的下一个元素str[j]!=c
str[j++]
The function can be declared and implemented the following way该函数可以通过以下方式声明和实现
char * remove_copy( char s1[], const char s2[], char c )
{
char *p = s1;
for ( ; *s2; ++s2 )
{
if ( *s2 != c )
{
*p++ = *s2;
}
}
*p = '\0';
return s1;
}
Pay attention to that the function gets
is unsafe and is not supported by the C Standard any more.请注意, gets
函数是不安全的,C 标准不再支持该函数。 Instead use the standard function fgets
.而是使用标准函数fgets
。
Here is a demonstrative program.这是一个演示程序。
#include <stdio.h>
#include <string.h>
char * remove_copy( char s1[], const char s2[], char c )
{
char *p = s1;
for ( ; *s2; ++s2 )
{
if ( *s2 != c )
{
*p++ = *s2;
}
}
*p = '\0';
return s1;
}
int main(void)
{
enum { N = 30 };
char str[N], word[N];
char c;
printf( "Enter a string: " );
fgets( str, N, stdin );
str[ strcspn( str, "\n" ) ] = '\0';
printf( "Enter a character to remove from the string: " );
c = getchar();
printf( "The result string is \"%s\"\n", remove_copy( word, str, c ) );
return 0;
}
Its output might look like它的输出可能看起来像
Enter a string: I am learning C++
Enter a character to remove from the string: +
The result string is "I am learning C"
remove
is reserved remove
被保留#include <stdio.h>
char *strchrrem(const char *str, char *dest, char c)
{
char *wrk = dest;
do
{
if(*str != c) *wrk++ = *str;
}while(*str++);
return dest;
}
int main(void)
{
char dest[64];
printf("%s\n", strchrrem("Hello world.", dest, 'l'));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.