Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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
C 返回变量的地址时出错_C_Return Value - Fatal编程技术网

C 返回变量的地址时出错

C 返回变量的地址时出错,c,return-value,C,Return Value,我们应该编写一个函数,返回字符串str中第一次出现的ch的地址。我编写了下面的代码,它运行并似乎返回可能正确的数字(我为字符串中的5个字符调用了函数5次,返回值之间用1个字节分隔),return语句中的符号用红色下划线,并将鼠标悬停在文本“return value type与function type不匹配”上。如果出现错误,我不理解代码是如何生成和运行的 #include <stdio.h> #include <string.h> int mystrchr (char

我们应该编写一个函数,返回字符串str中第一次出现的ch的地址。我编写了下面的代码,它运行并似乎返回可能正确的数字(我为字符串中的5个字符调用了函数5次,返回值之间用1个字节分隔),return语句中的符号用红色下划线,并将鼠标悬停在文本“return value type与function type不匹配”上。如果出现错误,我不理解代码是如何生成和运行的

#include <stdio.h>
#include <string.h>

int mystrchr (char *str, char ch){
    int i;
    for(i=0;i<strlen(str);i++){
        if(str[i]==ch)
        {
            //printf("%c\n",str[i]);
            return &str[i];
        }
    }
}
#包括
#包括
int mystrchr(char*str,char ch){
int i;

对于(i=0;i让我告诉你原因: 从您定义的Function
int mystrchr(char*str,char ch){}
,返回类型是
int
,但实际值是
&str[i];
,类型是代码中的
char*


因此有一个警告。

让我告诉你原因:
char* mystrchr (char *str, char ch){
int i;
for(i=0;i<strlen(str);i++){
    if(str[i]==ch)
    {
        break;
    }
}
return &str[i];
}
从您定义的Function
int mystrchr(char*str,char ch){}
,返回类型是
int
,但实际值是
&str[i];
,类型是代码中的
char*

因此有一个警告..

char*mystrchr(char*str,char-ch){
char* mystrchr (char *str, char ch){
int i;
for(i=0;i<strlen(str);i++){
    if(str[i]==ch)
    {
        break;
    }
}
return &str[i];
}
int i; 对于(i=0;i
char*mystrchr(char*str,char-ch){
int i;

对于(i=0;i您知道
&str[i];
不是
int
类型吗?“如果出现错误,我不理解代码是如何生成和运行的。”-使用编译器开关
-Werror
(或任何您的编译器版本)为了防止生成和运行。一些编译器供应商显然认为为错误代码生成垃圾可执行文件是有用的,在默认模式下,将返回类型从int更改为char*您知道
&str[i];
不是
int
类型吗?“如果出现错误,我不知道代码是如何生成和运行的。”-使用编译器开关
-Werror
(或编译器的任何版本)来阻止生成和运行。一些编译器供应商显然认为为错误代码生成垃圾可执行文件很有用,在默认模式下,将返回类型从int更改为char*