强制转换后出错:左值作为赋值的左操作数

时间:2014-10-05 22:40:11

标签: c type-conversion lvalue

我有一个用Vigenère密码方法加密字符串的函数。

void encrypt(const char * key, char * str) {
    [...]
    char * copy = duplicate(key); /*Like the strdup() function. It creates a copy of the string on the heap.*/
    [...] /* Here , i ensure that copy has the same size as str*/
    size_t k; 
    for (k=0;k<strlen(str);k++){
        if ((str[k]>='A' && str[k]<='Z') || (str[k]>='a' && str[k]<='z')){
            str[k]=(((str[k]+copy[k]))%26)+'A'; /*errors are at this line*/
        }
        else {
            str[k]=str[k];
        }
}

当我尝试加密时,我收到此错误

error: conversion to 'char' from 'int' may alter its value [-Werror=conversion]

我知道str [k]可能需要转换为char类型(或int?)但是当我用(char)str [k]或(int)str [k]替换str [k]时, 我收到了一个新错误。

error : lvalue required as left operand of assignment

在这里,我理解(char)str [k]不是左值,但我不明白为什么因为str是char上的指针,而不是const char。

所以我真的想知道为什么str | k]被认为是非左值,因为我现在不明白为什么。

感谢。

1 个答案:

答案 0 :(得分:0)

(char) x会生成char类型的新临时值(无论x的类型如何)。您无法分配此类值,就像您无法分配x + y = z1 + 2 = n之类的内容。

如果要使转换警告静音,则应该转换要分配的值:

str[k] = (char) ( /* ... */ );