【问题标题】:C - passing argument 1 of 'send_data' makes pointer from integer without a castC - 传递 'send_data' 的参数 1 使指针从整数而不进行强制转换
【发布时间】:2015-09-16 14:13:46
【问题描述】:

我正在为微控制器编写 uart 代码。我的代码在传递字符串(“...”)时工作正常,但是当我尝试传递 char('.')时出现问题。是的,我已经将“s”声明为字符串指针,但是有可能传递 char 值。是否有可能在 send_data 中同时传递字符串和字符值?

#include <stdio.h> 

void send_data( char *s)
{
    while(*s!='\0')
    {
        send_dt1(*s);
        s++;
    }
}

void send_dt1( char in_c)
{
   printf("%c",in_c);
}

int main(void)
{
    send_data("sample_data"); //fine
    send_data('Q'); //warning, no data displaying
  return 0; /* terminate the program */
}

谢谢..

【问题讨论】:

  • 嗨@CoolGuy 感谢您的回复。我试过了,我认为“Q”只是一个字符串,我需要通过“Q”。我想我的问题会有点伤害......
  • 您的函数需要一个指向以空字符结尾的字符串的第一个字符的指针。 'Q' 是一个字符文字。它不是指针,也不是以 null 结尾的字符串。
  • @cad - 在微控制器上,没有“segfaults”。但是,它可能取决于架构读取,直到它运行到引发中断/故障的内存区域,(充其量)可以通过重新启动 MCU 来处理。即使在运行完整操作系统的系统上,也不能保证段错误。事实上,我可能会说它更多你可能会遇到可读内存页面/区域结束的零。

标签: c pointers char


【解决方案1】:

正如send_data 期望s 无论如何都是一个null-terminated 字符串,我只推荐使用一个字符串:

send_data("Q");

注意事项:

  • 只要不修改s 处的字符串,就应该传递const char*

【讨论】:

    【解决方案2】:
     send_data('Q'); //warning, no data displaying
    

    不要将字符传递给它。它需要一个 char *

    你可以这样做 -

     send_data("Q"); 
    

    您还应该为函数void send_dt1( char in_c) 声明一个原型,因为在函数void send_data( char *s) 中定义它之前调用它。

    这也会产生警告。

    【讨论】:

      【解决方案3】:

      您不能将 char 传递给需要 char * 的函数。

      如果您确实需要同时传递两者,则需要另一个函数来接受 char 并将其放入字符串中,以便可以调用 send_data

      void send_char_data(char c)
      {
          char s[2];
          s[0] = c;
          s[1] = '\0';
          send_data(s);
      }
      
      ....
      
      int main(void)
      {
          send_data("sample_data");
          send_char_data('Q');
        return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        相关资源
        最近更新 更多