如何将文件中的每个字符存储到 c 中的数组中
How do I store each char from a file into an array in c
所以我想读取一个文件,然后将字符串一个字符一个字符地存储到一个char数组中。
我的输入文件只是一个简单的 "Hello"。
我想把这个字符串的字符存储到一个char数组中所以
arr[0] = H
arr[1] = e
arr[2] = l
arr[3] = l
arr[4] = o
我的代码如下,但不是存储每个字符,而是存储整个字符串
int main(void)
{
FILE *ifp;
ifp = fopen("inputfile.c","r");
int length = 20;
char arr[length][50];
int i = 0;
while(1)
{
char r = (char)fgetc(ifp);
int k = 0;
while(r != ',' && !feof(ifp))
{
arr[i][k++] = r;
r = (char)fgetc(ifp);
}
arr[i][k] = 0;
if(feof(ifp))
{
break;
}
i++;
}
int j;
for(j = 0; j <= i; j++)
{
printf("%s\n", arr[j] );
}
return 0;
}
我得到的是arr[0] = "Hello"
而不是 arr[0] = H
、arr[1] = e
等
关于如何从文件中逐字符存储而不是整个字符串,我能得到一些帮助吗?
正如 Barmar 已经指出的那样,它是一个二维数组。你可能会做
for(j = 0; j <= i; j++)
{
int wordlength = strlen(arr[j]);
for (int h = 0; h < wordlength; h++)
{
printf("%c\n", arr[j][h] );
}
}
编辑:不过您必须包含 string.h。
一个字符串就是一个字符数组:
char exampleString[6] = "Hello";
printf( "%c\n", exampleString[0]); // Prints 'H'
printf( "%c\n", exampleString[1]); // Prints 'e'
printf( "%c\n", exampleString[2]); // Prints 'l'
printf( "%c\n", exampleString[3]); // Prints 'l'
printf( "%c\n", exampleString[4]); // Prints 'o'
实际上 printf( "%c\n", exampleString[5]);
打印...什么都没有,因为字符串的第 (length+1) 个字符是空字符 (0x00);字符串终止符。
由于您定义了一个二维字符数组,每一行都是一个字符串。由于您将所有字符都存储在索引 0 处(您永远不会增加变量 i),因此 arr[0]
将恰好包含字符串 "Hello"。
为了访问字符串的第一个字符,您可以打印 arr[0][0]
,但我建议只声明一个一维数组。当然要确保数组能够适应最大文件大小 (dim=maxLen+1),否则你将在超空间中写 .
所以我想读取一个文件,然后将字符串一个字符一个字符地存储到一个char数组中。 我的输入文件只是一个简单的 "Hello"。 我想把这个字符串的字符存储到一个char数组中所以
arr[0] = H
arr[1] = e
arr[2] = l
arr[3] = l
arr[4] = o
我的代码如下,但不是存储每个字符,而是存储整个字符串
int main(void)
{
FILE *ifp;
ifp = fopen("inputfile.c","r");
int length = 20;
char arr[length][50];
int i = 0;
while(1)
{
char r = (char)fgetc(ifp);
int k = 0;
while(r != ',' && !feof(ifp))
{
arr[i][k++] = r;
r = (char)fgetc(ifp);
}
arr[i][k] = 0;
if(feof(ifp))
{
break;
}
i++;
}
int j;
for(j = 0; j <= i; j++)
{
printf("%s\n", arr[j] );
}
return 0;
}
我得到的是arr[0] = "Hello"
而不是 arr[0] = H
、arr[1] = e
等
关于如何从文件中逐字符存储而不是整个字符串,我能得到一些帮助吗?
正如 Barmar 已经指出的那样,它是一个二维数组。你可能会做
for(j = 0; j <= i; j++)
{
int wordlength = strlen(arr[j]);
for (int h = 0; h < wordlength; h++)
{
printf("%c\n", arr[j][h] );
}
}
编辑:不过您必须包含 string.h。
一个字符串就是一个字符数组:
char exampleString[6] = "Hello";
printf( "%c\n", exampleString[0]); // Prints 'H'
printf( "%c\n", exampleString[1]); // Prints 'e'
printf( "%c\n", exampleString[2]); // Prints 'l'
printf( "%c\n", exampleString[3]); // Prints 'l'
printf( "%c\n", exampleString[4]); // Prints 'o'
实际上 printf( "%c\n", exampleString[5]);
打印...什么都没有,因为字符串的第 (length+1) 个字符是空字符 (0x00);字符串终止符。
由于您定义了一个二维字符数组,每一行都是一个字符串。由于您将所有字符都存储在索引 0 处(您永远不会增加变量 i),因此 arr[0]
将恰好包含字符串 "Hello"。
为了访问字符串的第一个字符,您可以打印 arr[0][0]
,但我建议只声明一个一维数组。当然要确保数组能够适应最大文件大小 (dim=maxLen+1),否则你将在超空间中写 .