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

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

本文关键字:char 转换 C2440 错误 int      更新时间:2023-10-16

error 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左值、数组和函数指示符

除非是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] = '';   /* null character manually added */

如果您可以保持(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 = %xn", t);
    t = 'dcba';
    printf ("t = %xn", t);
}
[347] ~/tmp: ./a.out
t = 61626364
t = 64636261

在这里必须要小心,不要使用> sizeof(int)字符。我怀疑每个编译器对实际发生的事情的理解可能有所不同。使用此方法可以消除其他答案中浮动的所有额外字符串问题。