微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

char *指针数组在C中不递增

如何解决char *指针数组在C中不递增

我正在尝试编写一个程序来读取文件,打印文件中的内容,将所述文件内容添加到数组中,从数组中打印,然后使用数组的内容写入文件

我的问题是当我尝试打印到文件时,该数组只打印我的 char* 数组中的最后一个条目。为什么会发生这种情况?

问题代码如下:

    char name[100];
    int age = 0;
    float bBalance = 0;

    char* namesArray[100];
    int ageArray[100];
    float floatArray[100];

    for (int i = 0; i < 100; ++i) 
    {
        namesArray[i] = (char*)malloc(100);
    }


    fptr = fopen("NTD.txt","r");

    int lPtr = 1;

    if (fptr == NULL)
    {
        exit(1);
    }
    else
    {
        while (fscanf(fptr,"%99[^,],%d,%f",name,&age,&bBalance) != EOF)
        {
            namesArray[lPtr] = name;
            ageArray[lPtr] = age;
            floatArray[lPtr] = bBalance;

            printf("%s \n",namesArray[lPtr]);
            printf("%d \n",ageArray[lPtr]);
            printf("%f \n",floatArray[lPtr]);

            lPtr++;
        }

        fclose(fptr);
    }


    fptr = fopen("writeto.txt","w");

    if (fptr == NULL)
    {
        exit(1);
    }
    else
    {
        int i = 1;

        while (lPtr != 0)
        {
            fprintf(fptr,"%s,%f \n",namesArray[i],ageArray[i],floatArray[i]);

            i++;
        }

        fclose(fptr);
    }

这是最终文件的样子:

Jane,50,420.69

Sam,20,50.00

Fabian,21,682.22

Zac,35,40000.00

Gabe,12,0.00

Shy,29,12.00

Charlot,99,0.00

Gen,15,64592.68

Guy,98,20000.00

Bill,60,1000000.00

实际上是这样的:

Bill,420.690002 

Bill,50.000000 

Bill,682.219971 

Bill,40000.000000 

Bill,0.000000 

Bill,12.000000 

Bill,64592.679688 

Bill,20000.000000 

Bill,1000000.000000 

如果还有什么需要,请告诉我

解决方法

namesArray[lPtr] = name;

这是你的问题。您使 namesArray 中的每个元素都指向 namename 为每一行读取一个新值,最后,它包含读取的最后一个值。您预先malloc分配的所有存储空间都已泄露(它仍处于分配状态,但您不再持有任何指向它的指针,这意味着您无法使用它,也无法释放它)。

您想要执行 strncpy(namesArray[lPtr],name,100)将字符name 复制到 char * 中已经存在的 namesArray,而不是使用 { {1}} 复制指针本身,而不是指向的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。