【发布时间】:2020-04-05 04:38:39
【问题描述】:
这不是我的代码;我正在为 Linux 编译一个非常古老的互联网聊天/文件共享客户端和服务器 - 虽然服务器编译得很好,但我在编译客户端时遇到了错误。
fh_lookup (const char *path)
{
struct hl_filelist_hdr *fh;
char const *p, *ent;
char *dirpath;
int len, flen, blen = 0;
u_int16_t fnlen;
struct cached_filelist *cfl;
ent = path;
len = strlen(path);
for (p = path + len - 1; p >= path; p--) {
if (*p == dir_char) {
ent = p+1;
while (p > path && *p == dir_char)
p--;
blen = (p+1) - path;
break;
}
}
dirpath = xmalloc(blen + 1);
memcpy(dirpath, path, blen);
dirpath[blen] = 0;
for (cfl = cfl_list->next; cfl; cfl = cfl->next)
if (!strcmp(cfl->path, dirpath))
break;
xfree(dirpath);
if (!cfl)
return 0;
for (fh = cfl->fh; (u_int32_t)((char *)fh - (char *)cfl->fh) <
cfl->fhlen;
(char *)fh += flen + SIZEOF_HL_DATA_HDR) {
L16NTOH(flen, &fh->len);
L16NTOH(fnlen, &fh->fnlen);
if (!memcmp(fh->fname, ent, fnlen))
return fh;
}
return fh;
}
编译的时候报错:
error: lvalue required as left operand of assignment
(char *)fh += flen + SIZEOF_HL_DATA_HDR) {
但我不完全确定为什么。此错误也出现在其他文件的 for 循环中;所以它可能是旧的 C 样式,也许?我认为原始代码是在 2003 年编写的。我不确定。但我们将不胜感激任何解决此问题的帮助。
【问题讨论】:
-
抱歉,使用 nano;它没有复制整行。
-
你并没有真正问为什么它需要是左撇子,因为这很明显。根据定义,分配的任何左侧都必须是。我想你实际上是在问为什么它不被认为是左撇子。
-
部分。如果我不能对代码的 LHS 进行投射;那么我该如何重组它以使其工作呢?将声明 char * fh = NULL;做吗?
-
有点拗口,但类似:
fh = (struct hl_filelist_hdr *)((char *)fh + (flen + SIZEOF_HL_DATA_HDR))