首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有字符数组参数的函数

带有字符数组参数的函数
EN

Stack Overflow用户
提问于 2014-05-12 06:04:14
回答 5查看 40.7K关注 0票数 3

我正试图用C语言为PIC微控制器编写一个打印文本的函数(我认为它是基于gcc的)。

代码语言:javascript
复制
void print(char[] text);

void print(char[] text)
{
    for(ch = 0; ch < sizeof(text); ch ++)
    {
        do_something_with_character(text[ch]);
    }
}

就这样叫它:

代码语言:javascript
复制
print("some text");

我收到了编译器对错误括号的抱怨。

  1. 这是怎么回事?
  2. 在这种情况下,如何使用char数组指针?
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-12 06:15:05

我会这样做:

代码语言:javascript
复制
void print(char *text);

void print(char *text)
   {
   while(*text)
      {
      do_something_with_character(*text);
      ++text;
      }
   }
票数 6
EN

Stack Overflow用户

发布于 2014-05-12 06:11:01

正确的语法是

代码语言:javascript
复制
void print(char text[])

代码语言:javascript
复制
void print(char *text)

print()中,不能使用sizeof运算符来查找字符串text的长度,需要使用strlen() (首先包括<string.h> )或测试text[ch]是否为\0

票数 9
EN

Stack Overflow用户

发布于 2014-05-12 06:08:52

正如在其他答案中提到的,您的语法不正确。括号属于text之后。

同样重要的是,sizeof没有做您在这里所期望的事情:

代码语言:javascript
复制
void print(char[] text)
{
    for(ch = 0; ch < sizeof(text); ch ++)
                     ^^^^^^

记住,sizeof是一个编译时操作符,编译器在构建代码时用大小替换它。它不可能在运行时知道大小。

在这种情况下,sizeof(text)总是会在大多数32位系统上返回sizeof(void*)或4。你的平台可能会有变化。

你有两个选择:

  • 在另一个要打印的参数中传递长度。
  • char[]视为一个"C字串“,其中长度未知,但字符串以NUL字符结尾。

后者是您的最佳选择,您可能应该将char[]替换为char*

在这里,我们使用以NUL结尾的字符串,并使用指针对其进行迭代:

代码语言:javascript
复制
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);
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23602039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档