int main()
{
int a = 0;
int BUFSIZE = 1000;
char *string1[20];
FILE *fp1 = fopen("input1.txt", "r");
if (fp1 == 0)
{
fprintf(stderr, "Error while opening");
return 0;
}
string1[a] = (char *)malloc(BUFSIZE);
while (fgets(string1[a], BUFSIZE, fp1)!=NULL)
{
a++;
string1[a] = (char *)malloc(BUFSIZE);
}
printf("%c", string1[3]);
}
嗨,我得到上面的代码,它从文本文件中读取一个字符串并将其存储在一个数组中。现在我想输出数组string1的某个元素,但显然printf不起作用。此外,char * string1 [20]究竟定义了什么?它与指针有关吗?谢谢!
答案 0 :(得分:6)
char *string1[20]
声明一个名为string1
的数组,其中包含20个指向char
的指针。因此,string1[3]
是指向char
的指针,而不是char
格式所需的%c
指针。
由于string1[3]
是 - 如果有的话 - 通过fgets
填充,它包含一个以0结尾的字符串,因此您可以使用
printf("%s\n", string1[3]);
如果要打印单个字符,请使用
printf("%c\n", string1[3][4]);
例如。
答案 1 :(得分:0)
char* string1[20];
定义了一个指向char
数组的指针,这不是你想要的。你想要一个char
数组。
如果您删除*
声明中的string1
char string1[20];
它应该有用。
编辑:丹尼尔费舍尔是对的......这是一系列指向char的指针 然而,目前尚不清楚,你想做什么 如果您只想将文件读入单个数组,则可以执行以下操作:
int BUFSIZE = 1000;
char string[BUFSIZE];
FILE *fp1 = fopen("input1.txt", "r");
if ( fp1 == 0 )
{
fprintf(stderr, "Error while opening");
return 0;
}
fgets(string1, BUFSIZE, fp1);
printf("%s", string1); // print the whole file content
printf("%c", string1[3]); // print the fourth character
答案 2 :(得分:0)
它与指针有关。
要打印string1
的值,请使用opperator *
上的值
基本上,string1实际上并不包含指向数据的任何内容。所以你不想要string1 [20]的值,你想要它的值
printf("%c", *string1[19]);
应该
答案 3 :(得分:0)
char*
定义了一个指向char的指针。
char string[20]
定义了一个包含20个字符的数组。
char* string[5]
定义了一个包含5个char *的数组或指向char的指针。
如果您有一个char数组,并且您想将它用作例如空终止字符串,则需要获取第一个元素的地址,如下所示:
char array[20];
char* pointer = &array[0];
所以在你的情况下,char* string[20]
是一个char指针数组。
答案 4 :(得分:0)
char *string[20];
是一个指向“char”的指针数组,它可以用来将字母存储为“字符串”数组。我写了“string”,因为C没有像C ++那样的字符串数据类型。