【问题标题】:function in C to print char contentC中的函数打印字符内容
【发布时间】:2013-07-12 09:16:04
【问题描述】:

我正在尝试在 C 中创建一个函数来打印 char 变量的内容。

这是我的函数本身的代码:

void printChar(char ChArr[])
{
    int iCharLen = sizeof(ChArr); // define ChArr[] length
    int i;
    for(i = 0; i<iCharLen; i++)
    {
        printf("%c",ChArr[i]);
    }     
}

这是“int main()”的代码:

int main()
{  
  char ChAr[] = "A very long char!!!!";
  printChar(ChAr[]);  
  return 0;
}

我得到的错误是:“错误:']'标记之前的预期表达式”

错误是针对我调用 printChar() 的行。

注意:此代码仅适用于 C。

【问题讨论】:

  • 这段代码在很多层面上都被破坏了,你可能应该拿起一本关于 C 的教科书,或者至少先学习一些教程。要修复编译错误,您需要删除 ChAr 之后的 [],但代码无论如何都不会执行您想要的操作(提示 sizeof 不能那样工作)。

标签: c function char printf


【解决方案1】:

你也可以做一个 my_putchar 函数,这里是:

void my_putchar(char c)
{
write(1, &c, 1);
}

int main()
{
my_putchar('a'); // for example
}

您还可以使用更多花哨的东西,例如 my_putstr 或 my_puts func

void my_putstr(char *str)
{
int i;

i = 0;
while(str[i] != '\0')
{
my_putchar(str[i]);
i++;
}
}

或更短

void my_putstr(char *str)
{
write(1, str, strlen(str));
}

它可以做到:

int main()
{
my_putstr("abcdef");
}

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    当你声明时:

    char ChAr[] = "A very long char!!!!";
    

    ChAr[] 数组的默认大小是您在数组的定义/初始化中使用的字符串的大小。

    之后,在任何表达式中ChAr[] 都是无效的,您必须在[] 内给出一些索引值;这就是您收到错误消息的原因:

    "error: expected expression before ']' token"
    

    这意味着,在函数调用中:

    printChar(ChAr[]); 
                   ^  before ] you are missing some index value 
    

    此外,即使您将其称为printChar(ChAr[i]);,它也不会编译(不正确)并且会出现类型不匹配错误。根据您下面的函数声明:

    void printChar(char ChArr[]){
                        ^ you need an char*
    

    你应该把这个函数称为:

    printChar(ChAr); 
    

    因为ChAr 的类型是char[N],这是函数printChar 接受的参数。

    函数printChar() 中的下一个错误是使用sizeof 运算符评估字符串的长度是错误的;使用 strlen() 而不是 sizeof 运算符。这意味着:

     int iCharLen = sizeof(ChArr); // define ChArr[] length
    

    应该是:

     int iCharLen = strlen(ChArr); // define ChArr[] length
    

    别忘了#include &lt;string.h&gt;

    记住在函数声明中char ChArr[]char* ChArr 相同。

    sizeof() 运算符仅在给定数组名称时才返回数组的大小,但在您的函数中,您传递的是char* 的地址,它不会返回字符串的长度;相反,它给出了sizeof指针变量ChAr(通常是4字节或8字节)。

    要了解sizeof() 运算符在这两种情况下的工作原理,请阅读:What does sizeof(&arr) return?

    【讨论】:

    • 谢谢解释!明白了错误。修复。现在工作
    • @JonathanLeffler 感谢您修正我的小错误。我注意到revision 仔细,我会注意/改进我的答案。
    【解决方案3】:

    将字符数组传递给函数时删除[]。因此,您的函数调用将如下所示:

    printChar(ChAr);
    

    这将解决编译器错误。

    另外,在函数定义中使用strlen(ChArr),而不是sizeof(ChArr)

    只有这样,数组中的所有字符才会显示出来。

    【讨论】:

      【解决方案4】:

      调用函数时去掉[]:

      printChar(ChAr);
      

      此外,函数中的sizeof 将返回指向char 的指针的大小,而不是数组中的字符数。这可能不是您所期望的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多