当前位置: 首页 > 知识库问答 >
问题:

为什么这个简单的C程序不能打印?[重复]

颜祖鹤
2023-03-14

我试图制作一个基本的C程序来读取一个文件,但由于某种原因,当我使用make Test1运行它时<代码>/Test1 Test1。txt我得到“错误:'s'可能在未初始化的情况下用于此函数”。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char** argv) {


    if (argc < 2) {
        printf("error\n");
        return 0;
    }

    FILE *fp = fopen(argv[1], "r");

    if (fp == NULL)  {
        printf ("error\n");
        return 0;
    }

    char * s;

    int r = fscanf(fp, "%s", s);

    while (r != EOF) {
        printf("%s\n", s);
        r = fscanf(fp, "%s", s);
    }

    return 0;
}

共有2个答案

吕俊美
2023-03-14

当您读取设置为NULL的s时,它应该会崩溃,这意味着没有您留出的内存可以读取,它应该会崩溃您的程序,具体取决于操作系统取决于错误

执行char s[1000]至少会给它一些内存来读取。

漆雕洋
2023-03-14

问题在于fscanf。它不会分配任何内存,你必须自己完成,例如

char *s = malloc(100);  //array s is stored in the heap memory

char s[100];  //array s is stored in the stack

为了确保fscanf不会读取超过100个字符(因为这是我们拥有的内存),您必须编写

int r = fscanf(fp, "%99s", s); 
 类似资料:
  • 我正在学习使用stl向量,这是奇怪的,这个程序不能工作。这有什么问题?如果我想用Vector实现同样的功能,应该怎么做呢?

  • 在这个打印从1到10000000的所有数字、Haskell版本和C版本的简单程序中,为什么Haskell版本如此缓慢,以及哪些命令有助于学习如何提高Haskell程序的性能? 下面是一份报告,包含重现我激动人心的事件所需的所有细节,制作报告时会打印出来源,包括Makefile的来源:

  • 现在我正在学习C++我做了我的第一个小程序加法计算器,我写两个数字,它把它们相加。你能告诉我为什么我的输出是0吗? 输出:

  • 我想知道当您试图捕获StackOverflowError时会发生什么,并提出了以下方法: 现在我的问题是: 为什么这个方法打印'4'? 我想可能是因为在调用堆栈上需要3个段,但我不知道3这个数字来自哪里。当您查看的源代码(和字节码)时,通常会导致比3个多得多的方法调用(因此调用堆栈中的3个段是不够的)。如果这是因为Hotspot VM应用的优化(方法内联),我想知道在另一个VM上结果是否会有所不同

  • 产出:10 它可能是一个整数输出,它也不携带任何垃圾值,但当我将值分配给变量a作为和高于值时,它只是按原样打印输出,告诉我这里发生了什么!

  • 我有这个项目。然后我做以下步骤: 转到 预期结果:错误消息(在浏览器中呈现) 白标签错误页 此应用程序没有 /error的显式映射,因此您将此视为一种退回。星期二八月27 16:59:23CEST 2019有一个意外的错误(类型=未找到,状态=404)。没有可用的消息 如何更改附加的代码,使文件索引代替此错误。是否呈现xhtml? 更新1:如果我去,我得到这个错误: 白标签错误页此应用程序没有/E