'stripspaces'在没有强制转换的情况下从指针生成整数

时间:2011-11-10 10:54:29

标签: c

#include <stdio.h>  
#include <ctype.h>  
#define STRING_LEN 500         
void stripspaces(char, char, char);


int main(void)  
{  
   char string[STRING_LEN];         
   char *p1 = string;          
   char *p2 = string;

   printf("Enter a string of up to %d characters:\n", STRING_LEN);  
   while((*p1++ = getchar()) != '\n') ; 

  stripspaces(string, *p1, *p2); 

  getch();  
  return 0;
}  
void stripspaces (char s, char *x1, char *x2){ 
   *x1 = '\0';                 
   x1 = s;                
   while(*x1 != '\0')    
   {  
     if(ispunct(*x1) || isspace(*x1))  
     {                    
       ++x1;              
       continue;  
     }  
     else  
       *x2++ = *x1++;   
   }  
   *x2 = '\0';          
   printf("\nWith the spaces removed, the string is now:\n%s\n", s);  
}

此代码在“stripspaces”函数中显示以下错误; “传递'stripspaces'的arg 1会在没有投射的情况下从指针中产生整数”任何帮助都会很棒。

如果代码中不明显,程序应该接受一个字符串并从中删除所有空格。该功能必须保留,虽然我知道我可以在没有该功能的情况下完成。

3 个答案:

答案 0 :(得分:2)

您的原型和函数定义不匹配:

void stripspaces(char, char, char);

VS

void stripspaces (char s, char *x1, char *x2)

您应该将原型更改为

void stripspaces(char, char*, char*);

为了使它们都起作用,你应该使用

void stripspaces(char*, char*, char*);

void stripspaces (char *s, char *x1, char *x2)

更容易复制&amp;粘贴,您也可以在原型中使用参数名称。

答案 1 :(得分:1)

上述两个答案都告诉您函数声明是错误的。在将它们传递给函数时,您还要取消引用指针。

stripspaces(string, *p1, *p2);

这会将调用转换为(char *,char,char),这是不正确的,并且不会像预期的那样运行。它也是您看到的特定编译器错误的来源。编译器正在尝试将字符串(char *)放入char中,从而制作一个“不带强制转换的指针整数”,因为char基本上是1字节整数。

更正函数声明将是第一步,您想要传递所有指针,否则您将无法操纵该字符串。

修复声明,然后像这样调用函数。

stripspaces(string, p1, p2);

答案 2 :(得分:0)

您需要将第一个参数从char s(单个字符)更改为char *s(指针)