如何读取用户输入的字符串并进行分配?

时间:2018-11-30 09:45:05

标签: c arrays string file input

所以我已经在这段代码上工作了一段时间,但我不知道为什么它不起作用。基本上,我想使用一个函数创建一个程序,以读取用户输入的字符串,即“ data.txt”的文件名。我需要一个函数来确定文件中的行数,以便分配字符指针数组。然后,我的程序应打印出从文件读取的字符串。最后,程序应释放分配的内存。

这是我的无效代码。

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

#define MAX_WIDTH 144

void getFileName(char* array1);
int getLineCount(FILE* data, int max);
char** createArryOfPtrs(int rows);
int main(void) 
{
  int max = 0;
  int rows;
  char array1[MAX_WIDTH];
  FILE* data = fopen(array1, "r");
  getFileName(array1);
  getLineCount(data, max);
  createArryOfPtrs(rows);


  fclose(data);
  return 0;
}

void getFileName(char* array1)
{
  printf("Enter filename: ");
  fscanf(stdin, "%144[^\t]", array1);

}

int getLineCount(FILE* data, int max)
{
  int i = 4;
  char *array1[MAX_WIDTH];
  if(data != NULL)
  {
    while(fgets(*array1, MAX_WIDTH, data) != NULL)
    {
      i+=1;
    }
  }


return i;
}

char** createArryOfPtrs(int rows)
{
  int r = 4, c = 9, i, j, count;
  char *array1[r];
  for(i =0; i < r; i++)
  {
    array1[i] = (char*)malloc(c * sizeof(char));
  }
  count = 0;
  for(i = 0; i < r; i++)
  {
    for(j = 0; j < c; j++)
    {
      array1[i][j] = ++count;
    }
  }

  for(i = 0; i < r; i++)
  {
    for(j = 0; j < c; j++)
    {
      printf("%c", array1[i][j]);
    }
  }

  return 0;
}

这是文本文件。

larry snedden 123 mocking bird lane
sponge bob 321 bikini bottom beach
mary fleece 978 pasture road
hairy whodunit 456 get out of here now lane

我对C还是很陌生,所以非常困惑。感谢我可以获得的任何帮助。

1 个答案:

答案 0 :(得分:1)

订单很重要!您在调用fopen之后得到 后打开的文件名。这意味着array1中的数据将被初始化并不确定(并且似乎是随机的)。

您需要先读取文件名

如果您做了一点rubber duck debugging,这个问题应该已经很清楚了。