当您声明:
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 ofChAr
是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()
运算符在这两种情况下的工作原理,请阅读:sizeof(&arr) 返回什么?