【问题标题】:Stop string array [closed]停止字符串数组[关闭]
【发布时间】:2014-06-25 01:50:04
【问题描述】:

如何停止 sting 数组。如果我设置最多可以放置 40 个字符,但我不想用 40 个字符填充整个字符串。这是我在字符串数组中写入字符的代码。

int main(void)
 {

    char data[1][40];   
    int i1 = 0;
    int i2 = 0;
        serial_init();

        while (1)
    {

        for (i1=0;i1<1;i1++) 
            { 
               for (i2=0;i2<40;i2++) 
               { 
                  data[i1][i2] = Usart_Receive(); 
               } 
            } 

           for (i1=0;i1<1;i1++) 
           { 
               for (i2=0;i2<40;i2++) 
               { 
                  Usart_Transmit(data[i1][i2]); 
               } 
           }       

      }  
    return 0;   
}

例如,如果我推送if (Usart_Receive() == '.')。它的作用是停止字符串填充,直到 40 个字符。如何做到这一点,我希望有人可以在这里帮助我。

【问题讨论】:

  • c 字符串以空值结尾,因此简单的方法是使内部循环 while(data[i1][i2++] = Usart_Receive()) 并编写该字符获取函数以在输入时返回 0完成了。

标签: c arrays string avr uart


【解决方案1】:
    for (i1=0;i1<1;i1++) 
        { 
           for (i2=0;i2<40;i2++) 
           { 
              data[i1][i2] = Usart_Receive(); 
              if (data[i1][i2] == '.') {
                  if (i2 < 39) data[i1][i2+1] = '\0';  // null terminate string
                  break
              }
           } 
        } 

这将在 '.' 处停止接收,null 终止字符串(如果需要),并跳出循环。

【讨论】:

  • data[i1][i2+1] == '\0'; :无意义的条件。
  • 不,data[i1][i2+1] == '\0' 是一个完全正确的条件,问题在于它是作为一个赋值而不是一个条件;-) 很好,在答案中得到了修复。
  • data[i1][i2+1] = '\0'; 也是不安全的。
  • 这是什么?:data[i1][i2+1] = 0;,你的“更安全”的方法是什么?对于所有相关人员来说,举例而不是公开批评可能更具教育意义。
  • i2 的范围是 0-39。它超出了序列的范围是 39 的情况下的条件。(例如 data[i1][i2+1] = '\0'; -> data[i1][39+1(40)] = '\0';
【解决方案2】:

使用

    int main(void)
       {
        char data[1][40];   
        int i1 = 0;
        serial_init();
        while (1)
        {
        while (1)
        {
         data[0][i1] = '?'; //Add whatever You want 
         char received = Usart_Receive();
         if(received != '.'){
                    data[0][i1] = received;             
             }
            i1++;
            if(i1>40){
             break;
            }
         }
       i1 = 0;
       while (1)
         {
            Usart_Transmit(data[0][i2]);
            i1++;
            if(i1>40){
             break;
            }
         }
        }
        return 0;
        }

如果接收到的字符不等于“。”,这会将字符添加到您的数组中。还将字符填充到您的数组中,最多 40 个字符。

【讨论】:

  • i1&gt;40 :这是错误的。为时已晚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多