我正试图用C语言为PIC微控制器编写一个打印文本的函数(我认为它是基于gcc的)。
void print(char[] text);
void print(char[] text)
{
for(ch = 0; ch < sizeof(text); ch ++)
{
do_something_with_character(text[ch]);
}
}就这样叫它:
print("some text");我收到了编译器对错误括号的抱怨。
发布于 2014-05-12 06:15:05
我会这样做:
void print(char *text);
void print(char *text)
{
while(*text)
{
do_something_with_character(*text);
++text;
}
}发布于 2014-05-12 06:11:01
正确的语法是
void print(char text[])或
void print(char *text)在print()中,不能使用sizeof运算符来查找字符串text的长度,需要使用strlen() (首先包括<string.h> )或测试text[ch]是否为\0。
发布于 2014-05-12 06:08:52
正如在其他答案中提到的,您的语法不正确。括号属于text之后。
同样重要的是,sizeof没有做您在这里所期望的事情:
void print(char[] text)
{
for(ch = 0; ch < sizeof(text); ch ++)
^^^^^^记住,sizeof是一个编译时操作符,编译器在构建代码时用大小替换它。它不可能在运行时知道大小。
在这种情况下,sizeof(text)总是会在大多数32位系统上返回sizeof(void*)或4。你的平台可能会有变化。
你有两个选择:
char[]视为一个"C字串“,其中长度未知,但字符串以NUL字符结尾。后者是您的最佳选择,您可能应该将char[]替换为char*。
在这里,我们使用以NUL结尾的字符串,并使用指针对其进行迭代:
void print(const char* text)
{
const char* p;
// Iterate over each character of `text`,
// until we reach the NUL terminator
for (p = text; *p != '\0'; p++) {
// Pass each character to some function
do_something_with_character(*p);
}
}https://stackoverflow.com/questions/23602039
复制相似问题