字符串赋值给u中的uint8_t

时间:2016-10-27 08:56:43

标签: c string uint8t

我正在尝试将字符串分配给IAR中的rx_buffer.rx_struct.RESP.RESPOND缓冲区,但是我收到了一条警告消息。

struct fielduint8_t类型的strncpy(rx_buffer.rx_struct.RESP.RESPOND, (uint8_t *)'NS,', 3);

我的代码是:

Warning[Pe1422]: multicharacter character literal (potential portability problem) Warning[Pe167]: argument of type "uint8_t *" is incompatible with parameter of type "char *", Warning[Pe167]: argument of type "uint8_t *" is incompatible with parameter of type "char const"

相关的警告信息如下:

rx_buffer.rx_struct.RESP.RESPOND[0] = 'N';
rx_buffer.rx_struct.RESP.RESPOND[1] = 'S';
rx_buffer.rx_struct.RESP.RESPOND[2] = ',';

我写了一个解决方法:

SELECT COLUMN_NAME, TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%myColumn%'

但我对此并不满意。这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

您的代码在很多方面都不正确:

setit() {
    BashRun=$(ps -p "$$" -o etime=|tr '-' ':'|awk -F: '{total=0;m=1;} {for (i=0;i<NF;i++) {total+=$(NF-i)*m;m*=i>=2?24:60}} {print total}')
    ... ...
    if [ $? -eq 0 ]; then
        if [ $BashRun -gt 1 ]; then
            echo "It has already been set !"
        fi
    fi
}
  • 目标数组没有类型strncpy(rx_buffer.rx_struct.RESP.RESPOND, (uint8_t *)'NS,',3);
  • 源不是一个数组:char *是一个多字符字符常量,一个没有人会在任何体面代码中使用的非便携式历史奇怪...将它转换为'NS,'并不能解决这个问题。您应该使用双引号:(uint8_t *)
  • "NS,"不适合这项工作。事实上,它永远不是任何工作的正确工具。这个函数不是strncpy()的安全替代,它的语义被广泛误解,很容易出错。您应该避免使用此功能。在这种特殊情况下,它只会按预期复制3个字节,但为什么在strcpy是一个更简单的解决方案时使用strncpy()

您可以通过以下方式实现目标:

memcpy()

或者通过在问题中分别分配每个字节来交替。这两种方法都可能产生相同的机器代码。

答案 1 :(得分:0)

strncpy期望其前两个参数分别为char *const char *类型。 unit8_t *。

此外,char *是字符文字,字符串文字为'NS,'

答案 2 :(得分:0)

您使用的是单引号,但需要双引号(var in_target = []; var in_source = []; var reformed_data = []; for(var x in data) { var _target = data[x][0]; var _source = data[x][1]; if(in_target.indexOf( _target ) === -1) { if(in_source.indexOf( _source) === -1) { reformed_data.push( data ); } } in_target.push( _target ); in_source.push( _source ); } console.log( reformed_data ); ),并查看Stop using strncpy already!,在这种情况下,它应该按预期工作,因为您不想要尾随"NS,",但不要使用它。

使用'\0'memcpy,(作为样式问题)也不要使用像memmove这样的幻数:

3