【问题标题】:Printing array of char pointers打印字符指针数组
【发布时间】:2015-09-24 07:47:47
【问题描述】:

我正在尝试使用指针数组从文件中读取两行。但是,我没有在屏幕上看到任何东西。我已经尝试在线搜索,但无法解决问题。这是我在 mac 上使用 Netbeans 编写的代码。

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


            FILE *fp;
        char *points[50];
            char c;
        int i=0; 

        fp=fopen("/Users/shubhamsharma/Desktop/data.txt","r");
        if(fp==NULL)
        {
                printf("Reached here");
            fprintf(stderr," Could not open the File!");
            exit(1);
        }
            c=getc(fp);
        while(c!=EOF)
               {
                *points[i]=c;
                c=getc(fp);
                i++;
           } 

        for(int i=0;*points[i]!='\0';i++)
        {
                char d=*points[i];

            printf("%c",d);
                if(*(points[i+1])==',')
                {
                    i=i+1;
                }
        }
    return (EXIT_SUCCESS);
}

【问题讨论】:

  • 我个人会使用调试器
  • char *points[50]; char c; --> char points[50] ={0}; int c;
  • 我在不使用指针的情况下进行了尝试,并且效果很好。但是,我正在学习指针。因此,我必须有指针。
  • 也许您应该动态分配内存并将其分配给代表两行的 2 个指针,或者可能分配给指向一系列单词的指针数组。你声明指针没问题,但不要指向任何东西,因为你没有使用 malloc。
  • 另外,您没有检查是否溢出缓冲区或读取了多少字符。

标签: c++ c pointers file-handling char-pointer


【解决方案1】:
char *points[50];

不是你想要的,这是一个由 50 个指向 char 的指针组成的数组。

如果你想要一个指向char[50] 的指针数组,你需要:

char (*points)[50];
points = malloc(sizeof(*points) * 2);

还要注意fgets 更喜欢从文件中获取一行

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

int main(void)
{
    FILE *fp;
    char (*points)[50];

    points = malloc(sizeof(*points) * 2);
    if (points == NULL) {
        perror("malloc");
        exit(EXIT_FAILURE);
    }
    fp = fopen("/Users/shubhamsharma/Desktop/data.txt", "r");
    if (fp == NULL) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    fgets(points[0], sizeof(*points), fp);
    fgets(points[1], sizeof(*points), fp);
    fclose(fp);
    printf("%s", points[0]);
    printf("%s", points[1]);
    free(points);
    return 0;
}

【讨论】:

  • 非常感谢,效果很好。为什么我们使用 malloc?
  • 因此,每次我们创建指针时,我们都必须使用 malloc 在内存中分配它们,因为它们不指向任何东西。我说的对吗?
  • 你是对的,注意在这种情况下(当你事先知道有多少项目时)你不需要指向charchar points[2][50]; 的指针数组就足够了。
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多