1

错误 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;
    }
4

6 回答 6

5

首先,字符串用双引号",而不是单引号'。其次,要分配给char[]数组,您必须使用类似strcpy(). 您不能使用 直接分配给数组=

case 'p': strcpy(type, "pcs"); break;
case 'm': strcpy(type, "kgs"); break;
于 2013-03-28T18:02:22.247 回答
4

首先,'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'' 的表达式将转换为类型为 '' 的表达式指向类型''的指针,它指向数组对象的初始元素,不是左值。

于 2013-03-28T18:02:36.393 回答
1

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

type是一个数组。您不能将任何内容分配给整个数组=

[从技术上讲,该表达式type表现为指向数组第一个元素的不可修改指针,但您不能修改不可修改的值。]

于 2013-03-28T18:03:58.290 回答
0

使用 strcpy(type, "pcs") 和 strcpy(type, "kgs") 或 std:string,你不能简单地通过赋值来复制数组中的字符!

于 2013-03-28T18:03:49.590 回答
0

如果您可以保持 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) 字符,但您确实必须在这里小心。我怀疑每个编译器的实际情况可能会有所不同。使用这种方法可以消除其他答案中出现的所有额外字符串问题。

于 2013-03-28T20:37:21.230 回答
0

请使用 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 */
于 2013-03-28T18:05:55.943 回答