当您声明:
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) 返回什么?