繁体   English   中英

C程序崩溃

[英]C program crashes

嗨,我需要一些调试程序的帮助:它应该从控制台读取,处理输入并将其返回:

第二次调用while(scanf("%15s", input) != EOF)之后发生错误。 不幸的是,我无法告诉您错误是什么,因为程序冻结了,并且没有提供任何信息。 我认为input var出了点问题(它被多次传递了)

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

char* repeat(char c, int n);
char* drawLabel(char* label, int n);
char* drawBarnorm(char* label, int value);
char* drawBar(char* label, double value);

int main(void)
{
    char* input;
    double numIn;
    char buf[] = "";
    char* pOutput = &buf[0];

    while(scanf("%15s", input) != EOF)
    {
        scanf("%lf", &numIn);
        if (numIn > 1)
        {
            if (numIn > 30)
            {
                printf("num to big!\n");
                return 0;
            }

            strcat(pOutput, drawBarnorm(input, (int)numIn));
        } else
            {strcat(pOutput, drawBar(input, numIn));}


        printf("%s\n", pOutput);
    }

    printf("%s\n", pOutput);
    return 0;
}

char* repeat(char c, int n)
{
    char* out = (char*)malloc(sizeof(char)*50);
    int i, len;
    out[0] = '\0';

    for (i = 0; i < n; ++i)
    {
        len = strlen(out);
        out[len] = c;
        out[len+1] = '\0';
    }

    return out;
}

char* drawLabel(char* label, int n)
{
    if (strlen(label) > n)
    {
        char* newLabel = (char*)malloc(sizeof(char)*(n+1));
        newLabel[0] = '\0';
        strncpy(newLabel, label, n);
        newLabel[n] = '\0';
        return newLabel;
    } else if (strlen(label) < n)
    {
        strcat(label, repeat(' ', n-strlen(label)));
    }

    return label;
}

char* drawBarnorm(char* label, int value)
{
    char* bar = (char*)malloc(sizeof(char)*41);
    char* barPart;
    bar[0] = '\0';
    bar = drawLabel(label, 8);
    strcat(bar, "|");
    barPart = drawLabel(repeat('#', value), 30);
    strcat(bar, barPart);
    strcat(bar, "|");
    return bar;
}

char* drawBar(char* label, double value)
{
    int val = (int)(30.0*value);
    return drawBarnorm(label, val);
}

谢谢您的帮助。

char* input = malloc(size); /* Allocate memory of your wish */

分配内存以input您尚未初始化指针。

指针应指向某个有效的内存位置以通过scanf()存储值

您必须像这样初始化input或将其声明为数组

char input[16];

另外,您应该注意到scanf不会返回EOF它会返回匹配的参数数量,因此您必须进行更改

while(scanf("%15s", input) != EOF)

while(scanf("%15s", input) == 1)

因为while(scanf("%15s", input) != EOF始终为true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM