gpt4 book ai didi

c - tcc "lvalue expected"错误

转载 作者:行者123 更新时间:2023-11-30 20:03:30 31 4
gpt4 key购买 nike

很抱歉这个可能很荒谬的基本问题(我从十几岁起就没有用 C 编程过,现在我 39 岁了......),但是通过下面的代码我得到了 tcc 编译器的输出:

test.c:15: warning: assignment makes pointer from integer without a cast
test.c:26: error: lvalue expected

为什么第 26 行会发生这种情况?

感谢您的耐心等待,我这几天主要做web前后端的东西...

-----代码-----

#include <stdio.h>
// needed for gets() and puts()

char* input() {

char inp[256];

gets(inp);

return inp;
}

void output(outp) {

puts(outp);
}

int main() {

int exe = 1;
char inp[256];
char exit_msg[] = "END OF PROGRAM. THANK YOU!\0";

while(exe) {

inp = input(); // line 26
output(inp);

if (inp == "END"){

exe = 0;
}
}
puts(exit_msg);

return 0;
}

最佳答案

错误太多了...

  1. 永远不要使用gets。它已从 C 语言中删除,因为它无法安全使用。 (如果输入太长,您可能会遇到缓冲区溢出。)您可以使用例如改为 fgets

  2. input() 返回局部变量的地址。当局部变量超出范围时,即当 input 返回时,它们将被销毁。返回值总是垃圾。

  3. outp 缺少类型。看起来您正在从编译器中获取隐式 int(隐式 int 已于 1999 年从 C 中删除)。

  4. 字符串文字隐式以 NUL 结尾。 \0“END OF PROGRAM.THANK YOU!\0” 中没有太多作用(除了确保末尾有两个 NUL)。

  5. 不能在 C 中对数组进行赋值。inp = ... 无效。查看 strcpymemcpy。 (即使您可以分配给数组,inp = input() 也会出现类型错误,因为 input 返回一个指针,而不是一个数组(但您不能返回数组) ).)

  6. inp == "END" 比较指针。 inp 永远不会与字符串文字具有相同的地址。查看strcmp

  7. 为什么exe存在?您可以直接break 跳出循环,而不是设置exe = 0

(#5 是您的问题所涉及的问题。)

关于c - tcc "lvalue expected"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50307865/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com