C中的函数用于打印char内容

时间:2013-07-14 10:15:22

标签: c function char printf

我正在尝试在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.

4 个答案:

答案 0 :(得分:3)

宣布:

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 <string.h>

请记住,函数声明char ChArr[]char* ChArr相同。

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

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

答案 1 :(得分:2)

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

printChar(ChAr);

这将解决编译器错误。

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

只有这样才能显示数组中的所有字符。

答案 2 :(得分:1)

调用函数时删除[]:

printChar(ChAr);

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

答案 3 :(得分:0)

你也可以做一个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");
}

希望这能帮助你:)