【问题标题】:Unknown error regarding strings and stdio.h library [closed]关于字符串和 stdio.h 库的未知错误 [关闭]
【发布时间】:2016-01-27 17:26:39
【问题描述】:

我收到一个在 stdio.h 库中发现的未知错误。 请有人检查一下,告诉我代码有什么问题(但我认为它应该可以正常工作)。 附言我是新来的,所以如果这是一个不好的问题,请不要怪我。 代码:

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

    // Conversion from a number to a string
    char *i2s(int broj);

    int main()
    {
        char string1;
        int br, n;
        do
        {
            printf("How much numbers?\n -"), scanf("%d", &n);
        } while (n < 1);
        for (int i = 0; i < n; i++)
        {
            printf("\nbr = "), scanf("%d", &br);
            string1 = *i2s(br);
            printf(" %s", string1);
        }
        free(string1);
        getch();
        return 0;
    }

    char *i2s(int broj)
    {
        char *pom;
        int z=0,br=0,p;
        if (broj < 0)
        {
            z = 1;
            broj = -broj;
        }
        p = broj;
        do
        {
            br++;
            p /= 10;
        } while (p);
        pom = (char *)calloc(br + 1 + z, sizeof(char));
        if (z)
            pom[0] = '-';
        do
        {
            pom[--br + z] = '0' + broj % 10;
        } while (broj /= 10);
        return pom;
}

【问题讨论】:

  • = *i2s(br);...hmmmmm
  • 您可以从编译代码开始。并询问是否有任何您不理解的警告或错误消息。以下是您的代码的当前错误:ideone.com/l2YkrA。什么错误信息你不明白?
  • 我收到这些错误 clip2net.com/s/3tvMfMN 抱歉,我一个都不明白 @mikedu95
  • 如果您一个都不理解也没关系,因为 SO 正是为了询问您不理解的内容,但忽略编译器消息表明您没有努力了解错误的原因。现在您可以忘记这一点,因为您已经得到了答案,但下次请记住。因为大多数时候,您可以自己修复错误:)。
  • 对于第一个错误:onetwo。对于第二个错误:您正在将整数转换为没有强制转换的指针,即您正在“释放”一个值,而不是指针本身,第二个错误之后的注释会给您一个提示。最后,the third error。一点点搜索就能走很长的路。

标签: c


【解决方案1】:
char string1;
free(string1);

字符串 1 不是指针。

此外,在以下部分中,您每次运行循环时都会覆盖 string1。这样你就没有指向 free() 的指针,除非你在循环中这样做,否则你在函数内分配的内存。

for (int i = 0; i < n; i++)
    {
        printf("\nbr = "), scanf("%d", &br);
        string1 = *i2s(br);
        printf(" %s", string1);
    }

【讨论】:

    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多