Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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_Function_Warnings - Fatal编程技术网

C 接收函数声明中的错误

C 接收函数声明中的错误,c,function,warnings,C,Function,Warnings,我在以下程序中收到错误和警告 错误是 警告:数组函数参数上的sizeof将返回“char*”的大小,而不是“char[];[-Wsizeof数组参数] 我正在用c语言对字符数组进行反转 #包括 #定义MAXLENGTH 1000 无效反向(字符ss[],字符反向[]); int main() { 字符s[MAXLENGTH]; INTC; 字符d[MAXLENGTH]; int i=0; 而((c=getchar())!=EOF) { s[i]=c; i++; } s[i]='\0'; prin

我在以下程序中收到错误和警告

错误是

警告:数组函数参数上的sizeof将返回“char*”的大小,而不是“char[];[-Wsizeof数组参数]

我正在用c语言对字符数组进行反转

#包括
#定义MAXLENGTH 1000
无效反向(字符ss[],字符反向[]);
int main()
{
字符s[MAXLENGTH];
INTC;
字符d[MAXLENGTH];
int i=0;
而((c=getchar())!=EOF)
{
s[i]=c;
i++;
}
s[i]='\0';
printf(“%ld\n”,大小f);
反向(s、d);
printf(“%s”,d);
返回0;
}
无效反转(字符ss[],字符s2[]
{
int i=0;
int c=1;
printf(“%ld\n”,sizeof(ss));
对于(i=0;ss[i]='\0';i++)
{
对于(int j=c-1;j>=0;j--)
{
s2[j]=ss[i];
}
}
}

我是学c的新手。我相信我做错了什么,但我想不出是什么

注意这一行:

printf("%ld \n", sizeof(ss));
您没有打印出ss数组中的字节数。您只是打印出指针的大小。我相信如果你修好这条线,警告就会消失

也许你想要这个:

printf("%ld \n", strlen(ss));

我还没学会指针。还有别的办法吗@PaulOgilvie@OP,附带问题:奇怪的是,为什么选择
%ld”
printf一起使用(“%ld\n”,sizeof(s))
%u
%d
%zu
或任何其他说明符的比较?嗯@chux我知道我们分别对整数和长整数使用
%d
%ld
,谢谢您的反馈。希望您知道
“%zu”
是最好的或
printf(“%lu\n”,(无符号长)sizeof(ss))作为一个较弱的替代方案。
size()
的返回类型为
size\t
。它既不是
int
,也不是
long
,而是某种无符号类型。感谢@chux,它更有意义,
sizeof
用于打印字节数?…格式也应该是
printf(“%zu\n”,sizeof(ss))
。如果要使用任意整数格式,则应强制转换
sizeof
,sizeof运算符会告诉您操作数有多大。在这种情况下,我们无法判断ss是一个数组。它看起来就像一个指针。sizeof有点奇怪,因为当它能判断出操作数是一个数组并且知道它有多大时,它会返回缓冲区中的字节数。我想你的意思是“缓冲区的大小”
sizeof
无法知道您是如何使用它的。至于
%zu
#include<stdio.h>
    #define MAXLENGTH 1000
    void reverse(char ss[],char reversest[]);
    int main()
    {
        char s[MAXLENGTH];
        int c;
        char d[MAXLENGTH];
        int i=0;
        while((c=getchar())!=EOF)
        {
          s[i]=c;
          i++;
        }
        s[i]='\0';
        printf("%ld \n",sizeof(s));
        reverse(s,d);
        printf("%s",d);
        return 0;
    }
    void reverse(char ss[],char s2[])
    {
        int i=0;
        int c=1;
        printf("%ld \n", sizeof(ss));
        for(i=0;ss[i]=='\0';i++)
        {
            for(int j=c-1;j>=0;j--)
            {
                 s2[j]=ss[i];
            }
        }
    }
printf("%ld \n", sizeof(ss));
printf("%ld \n", strlen(ss));