所以我已经在这段代码上工作了一段时间,但我不知道为什么它不起作用。基本上,我想使用一个函数创建一个程序,以读取用户输入的字符串,即“ 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还是很陌生,所以非常困惑。感谢我可以获得的任何帮助。
答案 0 :(得分:1)
订单很重要!您在调用fopen
之后得到 后打开的文件名。这意味着array1
中的数据将被初始化并不确定(并且似乎是随机的)。
您需要先读取文件名 。
如果您做了一点rubber duck debugging,这个问题应该已经很清楚了。