繁体   English   中英

错误C2440:“ =”:无法从“ int”转换为“ char [5]”

[英]error C2440: '=' : cannot convert from 'int' to 'char [5]'

错误C2440:“ =”:无法从“ int”转换为“ char [5]”帮助我)

    char type[5];
    switch (rec[n-1].recptr->qtype)
    {
        case 'p':type='pcs'; break; //here is problem
        case 'm':type='kgs'; break; // and here is too
        default: printf("incorrect code");break;
    }

首先,串进去双引号" ,而不是单引号' 。其次,要分配给char[]数组你必须使用像函数strcpy()你不能直接分配到一个数组=

case 'p': strcpy(type, "pcs"); break;
case 'm': strcpy(type, "kgs"); break;

首先, 'pcs'是一个字符常量,而您需要一个字符串。 语法为"pcs"

而且, type是一个数组,因此当不与sizeof_Alignof或一元&运算符一起使用时,它会衰减为指针,并且不是左值。 因此,您不能重新分配type

strcpy可能是一个解决方案。

#include <string.h>

char type[5];

switch (rec[n-1].recptr->qtype)
{
    case 'p':
        strcpy(type,"pcs"); 
        break;
    case 'm':
        strcpy(type,"kgs"); 
        break;
    default: 
        printf("incorrect code");
        break;
}

或者,使用字符串垃圾(如果您不修改type ):

const char *type;
switch (rec[n-1].recptr->qtype)
{
    case 'p':
        type="pcs"; 
        break;
    case 'm':
        type="kgs"; 
        break;
    default: 
        printf("incorrect code");
        break;
}

参考文献

C11(n1570),第6.3.2.1节L值,数组和函数指示符

除非它是sizeof运算符, _Alignof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为“ array of type”的表达式转换为带有键入“指向类型的指针”,它指向数组对象的初始元素,而不是左值。

'pcs'int类型的多字符文字。

type是一个数组。 您不能使用=将任何东西分配给整个数组。

[从技术上讲,在该表达式type其行为相当于指向数组第一个元素的不可修改的指针,但是您不能修改不可修改的值。

使用strcpy(type,“ pcs”)和strcpy(type,“ kgs”)或std:string,您不能仅通过赋值来复制数组中的字符!

请使用strcpy,您不能使用=分配给char [5]

case 'p': strcpy(type, "pcs"); break;

但是如果您想避免使用strcpy(即使在这种理论上安全的情况下),也可以通过以下方式进行操作:

  /* partial copy (only 3 chars): */
  strncpy ( type, "pcs", 3 );
  type[4] = '\0';   /* null character manually added */

如果您可以保持sizeof(int)个字符以下,则可以执行以下操作:

int type;
switch (rec[n-1].recptr->qtype)
{
    case 'p':type='pcs'; break; //here is problem
    case 'm':type='kgs'; break; // and here is too
    default: printf("incorrect code");break;
}

上面的代码未经测试,尽管我确实对此进行了测试:

int main( int argc, char **argv)
{
    int t;
    t = 'abcd';
    printf ("t = %x\n", t);
    t = 'dcba';
    printf ("t = %x\n", t);
}

[347] ~/tmp: ./a.out
t = 61626364
t = 64636261

尽管这里您不必使用> sizeof(int)字符,但您实际上必须要小心。 我怀疑每个编译器的实际运行情况可能会有所不同。 使用此方法可以消除其他答案中所有多余的字符串担忧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM