Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过';无效';至不兼容类型的参数';const char*';?_C_Xcode_Compiler Errors_Xcode11 - Fatal编程技术网

通过';无效';至不兼容类型的参数';const char*';?

通过';无效';至不兼容类型的参数';const char*';?,c,xcode,compiler-errors,xcode11,C,Xcode,Compiler Errors,Xcode11,当我运行下面的代码时,我在这一行得到一个“将'void'传递给不兼容类型'const char*'的参数”错误: int result = strcmp(lowerCase(input), answers[i]); 错误所在的代码为: for (int i = 0; i <= sizeof(questions); i++) { printf("%s", questions[i]); scanf("%s", input); int result = strcmp(

当我运行下面的代码时,我在这一行得到一个“将'void'传递给不兼容类型'const char*'的参数”错误:

int result = strcmp(lowerCase(input), answers[i]);
错误所在的代码为:

for (int i = 0; i <= sizeof(questions); i++)
{
    printf("%s", questions[i]);
    scanf("%s", input);

    int result = strcmp(lowerCase(input), answers[i]);
    if (result == 0)
    {
        score++;
    }
}
for(int i=0;i='a'&s[c]编译器投诉

不能将不返回值的函数返回的值传递给另一个函数(因此会出现关于
void
const char*
的错误消息)

由于
lowerCase()
不返回值(其返回类型为
void
),因此无法执行以下操作:

strcmp(lowerCase(input), answers[i]);
您可以使用:

lowerCase(input);
int result = strcmp(input, answers[i]);
或者,修改
lowerCase()
,使其返回一个
char*
,并以
returns;
结束(然后不需要将调用更改为
strcmp()


重写
lowerCase()
由于包含
,因此可以编写:

void小写(char s[]
{
int c=0;
而(s[c]!='\0'){
if(isupper((无符号字符)s[c])){
s[c]=tolower((无符号字符)s[c]);
}
C++;
}
}
或:

char*小写(char s[]
{
对于(int c=0;s[c]!='\0';c++)
s[c]=tolower((无符号字符)s[c]);
返回s;
}
如果纯
char
是有符号类型,则强制转换是必需的。强制转换采用
int
,它是EOF或转换为
无符号char
的字符值

无需测试字符是否为小写;
tolower()
函数保留所有不是大写的内容不变,这也是使用这些函数的额外优势


其他问题 在
问题
答案
中有3个元素,但每个元素只初始化一个。当循环到索引1时,会得到空指针-因此错误消息中出现
地址=0x0
。您尝试从空指针读取数据;执行此操作后通常会发生崩溃

另外,
sizeof(questions)
几乎肯定是24—存储三个64位指针所需的字节数。如果您添加额外的两个问题和答案,则循环限制需要
sizeof(questions)/sizeof(questions[0])

因为您将输入转换为所有小写,所以永远不会得到与答案匹配的输入(混合大小写)


答案字符串存储在字符串文字中。如果您试图使用
lowerCase()
修改答案,您会遇到崩溃,因为字符串文字存储在只读内存中。

您无法将不返回值的函数返回的值传递给另一个函数(因此出现了关于
void
const char*
)的错误消息。因为
lowerCase()
不返回值(其返回类型为
void
),所以您不能执行:
strcmp(小写(输入),答案[i]);
。您可以调用
小写(输入);
,然后
int result=strcmp(输入,答案[i]);
。或者,修改
lowerCase()
,使其返回一个
char*
,并以
return s;
结束。非常感谢,这消除了错误。但是,当我返回s;,我得到另一个错误:线程1:EXC_BAD_ACCESS(code=1,address=0x0)。请参阅我更新答案的尾部部分以获得解释(至少指一些)法典中进一步的问题。
strcmp(lowerCase(input), answers[i]);
lowerCase(input);
int result = strcmp(input, answers[i]);