C 编程 - 分段错误(核心转储)


每次

运行它时,我都会不断遇到 seg 错误(核心转储(,无论我更改什么或编译正常的事实!不确定我在哪里犯了错误?有什么建议吗?

int main (int argc, char** argv)
{
    FILE *output;
    if ((output = fopen("output", "w")) == NULL)
    {
            printf ("cannot open the file inputn");
            exit (EXIT_FAILURE);
    }
    int data = 1;
    while (scanf("%d", data) > 0)
    {
            print(output, data);
    }
    fclose(output);
    return (0);
}
void print(FILE* output, int data)
{
    fprintf(output, "%dn", data);
    return;
}

1 将while (scanf("%d", data) > 0)更改为 while (scanf("%d", &data) > 0)

2 将print的功能移到开头。

这可能对你有用。

#include <stdio.h>
#include <string.h>
#define MAX 100
void print(FILE* output, int data)
{
    fprintf(output, "%dn", data);
    return;
}
int main (int argc, char** argv)
{
    FILE *output;
    if ((output = fopen("output", "w")) == NULL)
    {
            printf ("cannot open the file inputn");
            return -1;
    }
    int data = 1;
    while (scanf("%d", &data) > 0)
    {
            print(output, data);
    }
    fclose(output);
    return (0);
}

输入

1 2 3 "输入" "Ctrl+D">

while (scanf("%d", data) > 0)

应改为

while (scanf("%d", &data) > 0)

由于 scanf 期望传递变量的地址而不是变量本身,如果您传递一个变量,scanf 最终将通过考虑您传递的值作为内存地址来访问错误的内存,这将导致未定义的行为

首先,正如之前有人在这里所说,您需要将变量的地址传递给scanf函数,因此看起来像这样:

    scanf("%d", &data)

但是像你一样在 while 循环中使用它将无法正常工作,因为 scanf 不会返回您分配给变量的值。你必须像这样使用它:

   while(data > 0)
   {
       scanf("%d", &data);
       print(output, data);
   }

在这种情况下,我相信do-while循环比while循环更合适:

   do
   {
       scanf("%d", &data);
       print(output, data);
   } while (data > 0);

这样,它将按照您期望的方式工作。

您还忘记指定输出文件的文件类型:

    if ((output = fopen("output", "w")) == NULL)

应该是

    if ((output = fopen("output.txt", "w")) == NULL)

我在这里为您发布了一个完整的解决方案:https://pastebin.com/vpK9i6Wk

相关内容

  • 没有找到相关文章

最新更新