char *究竟定义了什么?如果它定义了一个字符串数组,我该如何输出一个元素?

时间:2012-11-10 19:14:15

标签: c arrays string pointers output

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]究竟定义了什么?它与指针有关吗?谢谢!

5 个答案:

答案 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 ++那样的字符串数据类型。