1

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

4 回答 4

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); 

因为 type ofChArchar[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()运算符在这两种情况下的工作原理,请阅读:sizeof(&arr) 返回什么?

于 2013-07-14T10:33:53.050 回答
2

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

printChar(ChAr);

这将解决编译器错误。

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

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

于 2013-07-14T10:17:04.663 回答
1

调用函数时去掉 []:

printChar(ChAr);

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

于 2013-07-14T10:17:04.733 回答
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");
}

希望这对你有帮助:)

于 2013-07-14T22:39:30.297 回答