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

4

5 回答 5

6
char *string1[20]

声明一个名为 的数组,string1包含 20 个指向char. 因此string1[3]是指向 的指针char,而不是格式char所需的 , 。%c

由于string1[3]是 - 如果有的话 - 填充 via fgets,它包含一个以 0 结尾的字符串,因此您可以使用打印出来

printf("%s\n", string1[3]);

如果你想打印一个字符,你会使用

printf("%c\n", string1[3][4]);

例如。

于 2012-11-10T19:17:13.487 回答
0
char* string1[20];

定义了一个指向char数组的指针,这不是你想要的。你想要一个char数组。

如果您在这样 *的声明中删除string1

char string1[20];

它应该工作。

编辑:Daniel Fisher 是对的……它是一个指向 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
于 2012-11-10T19:16:56.843 回答
0

它与指针有关。

要打印在操作员处string1使用值的值*
基本上,string1 实际上并不包含它指向数据的任何内容。所以你不想要 string1[20] 的值,你想要它的值

 printf("%c", *string1[19]);

应该做

于 2012-11-10T19:21:08.360 回答
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 指针数组。

于 2012-11-10T19:21:56.643 回答
0

char *string[20];是指向“char”的指针数组,可用于将字母存储为“字符串”数组。我写了“字符串”,因为 C 不像 C++ 那样具有字符串数据类型。

于 2012-11-10T19:22:46.707 回答