tcc" lvalue expected"错误

时间:2018-05-12 15:30:04

标签: c lvalue tcc

很抱歉这可能是一个荒谬而基本的问题(我从十几岁开始就没有用C语言编程,而我现在已经39岁了......),但是下面的代码我得到的输出来自tcc编译器:

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

为什么这会在第26行发生?

感谢您的耐心,这些天我主要做网络前端和后端的事情......

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

#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 个答案:

答案 0 :(得分:2)

有太多错误......

  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返回一个指针,而不是数组(但是您不能返回数组)。)

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

  7. 为什么exe存在?不是设置exe = 0,而是可以break退出循环。

  8. (#5是你的问题所在。)