为什么函数看不到“ NULL”字符

时间:2019-04-01 16:54:25

标签: c

我正在尝试创建一个程序,该程序将为读取新字符分配内存,直到读取空字符为止,但这似乎不起作用

被注释的行上的printf(在while循环条件之后)向我显示了c + i指向的值,我只是检查了一下,即使它向我显示了字符NULL(它只是打印'-- ',我假设这是字符NULL?)循环继续进行。

char *read(char *c) {

    int i=0;

    c=(char*)malloc(1);
    scanf("%c", c+i); 

    while (*(c+i)) {
        //printf("-- %c --", *(c+i));

        i++;
        c=(char*)realloc(c,i+1);
        scanf("%c", c+i);
    }

    return c;
}

1 个答案:

答案 0 :(得分:1)

您的实现不会停止,因为它从不读取NULL字符。当您按RETURN / ENTER之类的键时,控制台会生成换行符序列(在某些操作系统(如Linux)中为“ \n”,在某些操作系统(如Windows)中为“ \r\n”)。

话虽如此,然后您可以更改您的while条件以检查读取的字符是'\n'还是'\r'以结束读取,而不是检查它是否是{{1 }}。不过,一旦用户按下返回键,该解决方案就会停止读取