我有一个用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]被认为是非左值,因为我现在不明白为什么。
感谢。
答案 0 :(得分:0)
(char) x
会生成char
类型的新临时值(无论x
的类型如何)。您无法分配此类值,就像您无法分配x + y = z
或1 + 2 = n
之类的内容。
如果要使转换警告静音,则应该转换要分配的值:
str[k] = (char) ( /* ... */ );