我正在尝试在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.
答案 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");
}
希望这能帮助你:)