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

循环fscanf内的分配不正确

如何解决循环fscanf内的分配不正确

我有一个使用calloc创建的指针数组,我正在使用它在其中存储字符串,并且正在使用fscanf从文件中收集数据。

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

int main ()
{
    FILE *fp;
    int length,i;
    fp = fopen("file.txt","r");
     if (fp == NULL) {
        printf("Error opening file\n");
        exit(1);
    }
    char str[5];
    char  **rot = calloc(length,5);
    fscanf(fp,"%d",&length);
    for (i = 0; i < length; i++) {
                if (fscanf(fp,"%s",str) == 1)
                {
                    rot[i] = str;
                    printf("%s\n",rot[i]);
                }
                else
                {
                    break;
                }
        }

    printf("element: %s\n",rot[1]);
    printf("element: %s\n",rot[0]);
    printf("element: %s\n",rot[2]);

    return 0;
}

我的文件中只有一行,它是这样的:6 a11 a22 a33 a44 a55 a66 a77

一个值是一个整数,它告诉我接下来有多少个字符串。我正在使用fscanf将值和值存储在变量中,并尝试将它们分配到我的数组中,但是发生了一些奇怪的事情。

如果在分配值后立即在循环内打印值,它们将正确显示。但是,如果我退出循环后尝试打印,无论我选择什么索引,总是显示相同的值,而不是循环内显示的值

我得到的输出是:

a11
a22
a33
a44
a55
a66
元素:a66
元素:a66
元素:a66

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