【问题标题】:Main function stuck in a loop without it entering one主函数卡在一个循环中而没有进入一个
【发布时间】:2016-04-23 22:41:30
【问题描述】:

我有一个任务是在 Linux 中实现 tail 命令的基本实现,它运行良好,但是当我运行它时,它只是转到下一行并且什么都不做。代码如下:

int main(int argc, char *argv[])
{
    int counter;
    printf("program started");
    if(argc == 1)
    {
        printf("hello1");
        tailSTDIN();
    }
    else if(argc == 2)
    {
        printf("here");
        tailFile(argv[1]);
        printf("tailed");
    }
    else for(counter = 0; counter < argc; counter++)
    {
        printf("loop");
        if(argv[argc] == "-")
        {
            printTitle("standard input");
            tailSTDIN();
        }
        else
        {
            printTitle(argv[counter]);
            tailFile(argv[counter]);
        }
    }

    return 0;
}

好的,所以问题是它卡住了,它甚至没有到达第一个printf(),它说program started,它只是在等待一些东西。这与我给出的论点或论点无关。 如果您认为您需要包含其余函数的完整代码,我会将其放入,但问题是它永远无法调用它们。

【问题讨论】:

  • 你是如何运行你的代码的。我的意思是命令和参数。
  • 它没有卡住,您只是永远看不到您打印的内容,因为标准输出默认是行缓冲的,并且您没有在消息中包含任何换行符来触发行刷新。跨度>
  • \n 添加到您的 printf 调用中(如果您进行输出重定向,则调用 fflush(stdout);)。
  • 使用调试器。或者至少用"program started\n" 替换"program started" 以确保出现消息(stdout 可能被缓冲,换行强制刷新缓冲区)。
  • 还要检查if(argv[argc] == "-") - “对字符串常量地址的逻辑运算”

标签: c loops main


【解决方案1】:

当您使用 stdout 输出时,行会被缓冲,直到整个缓冲区被填满或遇到换行符。 用 \n 字符终止你的行:

printf("program started\n");

你会得到你的输出。

【讨论】:

  • 是的,这就是问题所在,我会在允许时将其标记为正确答案:)
猜你喜欢
  • 2010-12-17
  • 2011-10-12
  • 2018-06-22
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多