#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会在没有投射的情况下从指针中产生整数”任何帮助都会很棒。
如果代码中不明显,程序应该接受一个字符串并从中删除所有空格。该功能必须保留,虽然我知道我可以在没有该功能的情况下完成。
答案 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
(指针)